快速排序
- 分置法,挖坑填数
将第一个数作为基准数,所有数都和基准数比较
取完基准数后的坑必须填上才能前进
从右边向左开始找第一个小于基准数元素
9比基准数大continue(j要找比基准数小的),3比基准数小取出拿去填i指针的坑
3,2都比基准数小(i要找比基准数大的),到8将8取出填j指针的坑
(j要找比基准数小的)将1填i的坑
i要找比基准数大的)到5将5拿出填j的坑
(j要找比基准数小的)没有找到,ij指针重合了
将基准数取出填坑,这时基准数的位置肯定是对的了
再从基准数隔开的一般进行同样的操作
3为基准,重合后将基准数拿出填坑
#include<iostream> using namespace std; void Print_Array(int* arr,int len) { for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; } //快速排序 void QuickSort(int* arr, int start, int end) { int i = start; int j = end; //基准数 int temp = arr[start]; if (i < j) { while (i < j) { //从右向左找比基准数小的,j while (i < j && arr[j] >= temp) { j--; } //填坑 if (i<j) { arr[i] = arr[j]; i++; } //从左向右找比基准数大的,i while (i < j && arr[i] <= temp) { i++; } //填坑 if (i < j) { arr[j] = arr[i]; j--; } } //把基准数放到i位置 arr[i] = temp; //对左半部分进行快速排序 QuickSort(arr, start, i - 1); //对右半部分进行快速排序 QuickSort(arr, i + 1, end); } } int main() { int My_Array[] = { 4,2,8,0,5,7,1,3,9 }; int len = sizeof(My_Array) / sizeof(int); Print_Array(My_Array, len); QuickSort(My_Array, 0, len -1); Print_Array(My_Array, len); return 0; }