折半查找:
//折半查找 int BinarySearch(int num,int a[],int length) { int left=0; int right=length-1; while(left<right) { int middle=(left+right)/2; if(a[middle]==num) return middle; else if(a[middle]>num) right=middle-1; else left=middle+1; } return -1; }
冒泡排序:
//冒泡排序 int BubbleSort(int a[],int length) { for(int i=0;i<length;i++) for(int j=0;j<(length-i);j++) { if(a[j]>a[j+1]) swap(a[j],a[i+1]); } }
快速排序(有点小问题,忘了跳出迭代了):
//快速排序 void QuickSort(int a[],int left,int right) { int pivotpos=Partition(a,left,right); QuickSort(a,left,pivotpos-1); QuickSort(a,pivotpos+1,right); } //把小于基准的搞到左边,大于基准的去右边 int Partition(int a[],int low,int high) { int pivot = a[low]; int pos=low; for(int i=low+1;i<high;i++) { if(a[i]<pivot) { Swap(a[i],a[pos]); pos++; } } return pos; }
//选择排序,算法思想:每一次从后面n-i个待排序对象中选择一个最小的, //放在第n个位置,话说这算法时间复杂度真的很高... void SelectSort(int a[],int length) { for(int i=0;i<length;i++) Exchange(a,i,length); } //从后面n-i个待排序对象中选择一个最小的,放在第n个位置 void Exchange(int a[],int i,int length) { int min = a[i]; int index=i; for(int m=i+1;i<length;i++) { if(a[m]<min) { min=a[m]; index=m; } } swap(a[i],a[index]); }
//归并排序,两个已经排好顺序的数组,合并成一个数组 int* Merge(int a[],int b[],int aLength,int bLength) { int cLength = aLength+bLength; int* c=new int[cLength]; int aIndex=0,bIndex=0,cIndex=0; while(aIndex<aLength&&bIndex<bLength) c[cIndex++]=a[aIndex]<b[bIndex]?a[aIndex++]:b[bIndex++]; while(aIndex<aLength) c[cIndex++]=a[aIndex++]; while(bIndex<bLength) c[cIndex++]=b[bIndex++]; return c; }
shell排序:先比较距离远的元素,这样可以快速减少大量的无需情况,从而减轻后续工作。