快速排序
具体思路:
每次找一个基准数来调整数组中的元素,调整完之后i和j相遇的地方,左边都是小于等于基准数的,右边都是大于等于基准数的。
然后递归往下进行,直到只有一个元素
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAXSIZE = 100000; 4 int n; 5 int a[MAXSIZE]; 6 void quicksort(int left,int right){ 7 int i, j, t, tmp; 8 if(left > right){ 9 return ; 10 } 11 tmp = a[left]; 12 i = left; 13 j = right; 14 while(i != j){ 15 while(a[j] >= tmp && i < j){ 16 j--; 17 } 18 while(a[i] <= tmp && i < j){ 19 i++; 20 } 21 if(i < j){ 22 swap(a[i], a[j]); 23 } 24 } 25 a[left] = a[i]; 26 a[i] = tmp; 27 quicksort(left, i - 1); 28 quicksort(i + 1, right); 29 return ; 30 } 31 int main(){ 32 33 int i, j, t; 34 scanf("%d", &n); 35 for(i = 1; i <= n; i++){ 36 scanf("%d", &a[i]); 37 } 38 quicksort(1,n); 39 for(i = 1; i <= n; i++){ 40 printf("%d ",a[i]); 41 } 42 printf("\n"); 43 return 0; 44 }