高速排序是最快的通用内部排序算法,比归并排序(nlogn)速度更快,尽管复杂度都是nlogn。并且归并排序须要n的辅助空间,高速排序不须要。
。
。高速排序的实现也是分治。
。
。就是前面一个指针,后面一个指针。。
。
手敲快排:
void qsort(int s[],int left,int right) { if(left < right) { //swap(s[left],s[(left+right)/2]); int i = left,j = right,x = s[left]; while(i<j) { while(i<j && s[j] >= x) j--; if(i<j) s[i++] = s[j]; while(i<j && s[i] <= x) i++; if(i<j) s[j--] = s[i]; } s[i] = x; qsort(s,left,i-1); qsort(s,i+1,right); } return ; }
那个交换加上无非就是中间參照物的问题。改变的是快排的实际复杂度。
。。