前言
记录key,key一般都是最左边,目的就是为了把key排到正确的位置,同时将key设为坑位
开始坑在左边,右边开始找值补坑,right找到比key小的值,放入坑位,right形成新的坑
现在坑在右边,左边开始找值补坑,left找到比key大的值,放入坑位,left形成新的坑
直到left和right相遇就结束,最后把key放到坑位,key就排到正确的位置

More info: QuickSort
快速排序(QuickSort)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| bool QuickSort(int buf[],int begin,int end) { int temp = 0;
int left = begin,right = end;
if(begin < end) { temp = buf[begin];
while (left != right) { while (left < right && buf[right] >= temp) { right--; }
if(left < right) { buf[left] = buf[right]; left++; }
while (left < right && buf[left] <= temp) { left++; }
if(left < right) { buf[right] = buf[left]; right--; } }
buf[left] = temp;
QuickSort(buf,begin,left-1);
QuickSort(buf,left+1,end); }
return true; }
|
遍历元素(Prin)
1 2 3 4 5 6 7 8 9 10
| bool Prin(int buf[],int size) { printf("Element:"); for(int i= 0;i< size;i++) { printf("%d ",buf[i]); } printf("\n"); return true; }
|
main主程序
1 2 3 4 5 6 7 8 9 10 11 12 13
| int main() { int buf[10]={2,4,1,6,8,2,6,1,7,4};
Prin(buf,sizeof(buf)/ sizeof(buf[1]));
QuickSort(buf, 0,9);
Prin(buf,sizeof(buf)/ sizeof(buf[1]));
return 0; }
|
结果验证
1 2 3 4
| Element:2 4 1 6 8 2 6 1 7 4 Element:1 1 2 2 4 4 6 6 7 8
进程已结束,退出代码0
|
汇总
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #include <stdio.h> #include <stdbool.h>
bool QuickSort(int buf[],int begin,int end) { int temp = 0;
int left = begin,right = end;
if(begin < end) { temp = buf[begin];
while (left != right) { while (left < right && buf[right] >= temp) { right--; }
if(left < right) { buf[left] = buf[right]; left++; }
while (left < right && buf[left] <= temp) { left++; }
if(left < right) { buf[right] = buf[left]; right--; } }
buf[left] = temp;
QuickSort(buf,begin,left-1);
QuickSort(buf,left+1,end); }
return true; }
bool Prin(int buf[],int size) { printf("Element:"); for(int i= 0;i< size;i++) { printf("%d ",buf[i]); } printf("\n"); return true; }
int main() { int buf[10]={2,4,1,6,8,2,6,1,7,4};
Prin(buf,sizeof(buf)/ sizeof(buf[1]));
QuickSort(buf, 0,9);
Prin(buf,sizeof(buf)/ sizeof(buf[1]));
return 0; }
|