快速排序
快速排序:
有点归并排序的思想,分而治之。主要分为主元选取,子集划分两个阶段。主元选取有点讲究,不同的主元会导致运算效率不同,并且排序数量的大小也会影响效率,如果排序数为100以下,有时插入排序要比快速排序效率更高,此时可以设定一个阈值来确定用哪个排序算法。
示例代码:
此处为了方便,将要排序的最右边的数当作主元pivot
1 // Quick sort 2 #include <iostream> 3 using namespace std; 4 void qsort(int a[], int l, int r) 5 { 6 if(l >= r) return; 7 int i = l, j = r-1, pivot = a[r]; 8 while(true) 9 { 10 while(a[i] < pivot) i++; 11 while(a[j] > pivot) j--; 12 if(i < j) swap(a[i++], a[j--]); // 注意此处要处理i和j的值 13 else break; 14 } 15 swap(a[i],a[r]); // 注意,i最终的位置才是主元要放的位置,此时主元的位置已最终确定 16 qsort(a,l,i-1); 17 qsort(a,i+1,r); 18 } 19 void quick_sort(int a[], int n) 20 { 21 qsort(a,0,n-1); 22 } 23 int main() 24 { 25 int a[] = {10,2,1,5,4,3,9,7,6,8}; 26 const int n = 10; 27 quick_sort(a,n); 28 for(int i = 0; i < n; i++) cout << a[i] << " "; 29 return 0; 30 }

浙公网安备 33010602011771号