快速排序(递归)

 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 } 

 

posted @ 2020-02-23 15:41  xuecl  阅读(484)  评论(0编辑  收藏  举报