快排

原理描述:

  1. 在数组中取出任意1个元素作为中间数,通过比较大小用来划分左右元素,大于中间数在其右侧,小于在其左侧,等于不变;
  2. 通过分而治之的原则 ,进行递归重复执行步骤1实现排序。

过程:

  先右后左的执行顺序,找到跳出,递归前后部分

 

 代码实现:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void QuickSort(int array[],int left ,int right)
 5 {
 6      if(left >=right)
 7      {
 8          return;
 9      }
10      int i=left;
11      int j=right;
12      //基数 
13      int baseNum =array[i];
14      while(i <j)
15      {
16     
17      while(i <j)
18      {
19          // 从后向前查找小于 baseNum的数据 
20          if( array[j]<=baseNum) 
21         {
22             //找到的内容放在前面预留的位置 
23             array[i]= array[j];
24             i++;//后移动 
25             break; 
26         }
27         else
28         {
29             //找不到一直向前找 
30             j--; 
31         } 
32     }
33          while(i <j)
34      {
35         
36         //从前向后 查找大于baseNum的数据 
37         if( array[i]>baseNum)
38         {
39             array[j]= array[i];
40             j--;//前移动 
41             break;
42          } 
43          else
44          {
45              i++; //找不到一直向后找 
46          } 
47      } 
48  }
49 
50  //中间位置 赋值基线值 
51  array[i]=baseNum; 
52  //前部分再次重复划分   i-1原因是不包含其中间值 
53  QuickSort(array,left,i-1);  
54  //后部分重复划分 i+1原因是不包含其中间值
55  QuickSort(array,i+1,right) ;
56 }
57 
58 int main()
59 {
60     int ls[]={3,21,87,1,21,10};
61         for(int i=0;i<6;i++)
62     {
63         cout<<ls[i]<<endl;
64     }
65     int len = sizeof(ls)/sizeof(int);
66     cout<< len<<endl;
67     QuickSort(ls,0,5);
68     for(int i=0;i<6;i++)
69     {
70         cout<<ls[i]<<endl;
71     }
72     return 0;
73 }
View Code

 

posted @ 2022-02-18 16:44  稳重》》小子  阅读(28)  评论(0编辑  收藏  举报