快速排序(递归)
1 #include <iostream> 2 using namespace std; 3 4 void swap(int* a,int* b){ 5 int temp = 0; 6 temp = *a;*a=*b;*b=temp; 7 } 8 9 void qsort(int arr[],int left,int right){ 10 11 if(left<right){//递归边界,保证当前区间的长度不超过1 12 13 int i = left; 14 int j = right; 15 int key = arr[i]; 16 17 //下面的while循环的作用,就是将数组中 比key小的数据放在key左边,比key大的数据放在key右边 18 19 while(i<j){//只要i与j不相遇 20 21 while(i<j && arr[j]>=key) j--;//反复左移 22 swap(&arr[i],&arr[j]);//while结束,即找到比key小的值,就交换位置 23 24 while(i<j && arr[i]<=key) i++; 25 swap(&arr[i],&arr[j]); 26 } 27 28 qsort(arr,left,i-1);//对 左区间进行快速排序 29 qsort(arr,i+1,right);//对 右区间进行快速排序 30 } 31 32 } 33 34 int main(){ 35 36 int num[7]={5,4,7,1,2,3,9}; 37 qsort(num,0,6); 38 for(int i=0;i<7;i++){ 39 cout<<num[i]<<'\n'; 40 } 41 42 return 0; 43 }