排序算法 之 快速排序

 1 #include <iostream>
 2 using namespace std;
 3 int partion(int data[],int length,int start ,int end)
 4 
 5 {
 6     if (data == nullptr || length <= 0 ||end >= length)
 7     {
 8         return 0;
 9     }
10     int small = start -1 ;
11     int index =(start + end) >> 1;
12     swap(data[index],data[end]);
13     for (int index = start ; index < end ; ++index)
14     {
15         if (data[index] < data[end])
16         {
17             small++;
18             if (small != index)
19             {
20                 swap(data[index],data[small]);
21             }
22         }
23     }
24     small++;
25     swap(data[end],data[small]);
26     return small;
27 }
28 int quickSort(int data[],int length,int start ,int end)
29 {
30     if (data == nullptr || length <= 0 ||end >= length)
31     {
32         return 0 ;
33     }
34     if (start == end)
35     {
36         return 0 ;
37     }
38     int index = partion(data,length,start ,end);
39     if (index > start)
40     {
41         quickSort(data,length,start ,--index);
42     }
43     if (index < end )
44     {
45         quickSort(data,length,++index ,end);
46     }
47 }
48 int main()
49 {
50     int data[] = {2,3,5,1,50,6,4,0,-3,656,21,64,59,-78,62,3};
51     quickSort(data,sizeof(data)/sizeof(int),0,sizeof(data)/sizeof(int)-1);
52     for (int i =0 ;i < sizeof(data)/sizeof(int) ;++i)
53     {
54         printf("%d ",data[i]);
55     }
56     return 0;
57 }

输出结果为:-78 -3 0 1 2 3 3 4 5 6 21 50 59 62 64 656

猜你喜欢

转载自www.cnblogs.com/hit-ycy/p/10851464.html