快速排序算法——C/C++
三个函数
基准插入函数:int getStandard(int array[],int low,int high)
(返回基准位置下标)
递归排序函数:void quickSort(int array[],int low,int high)
主函数:int main()
#include <stdio.h> #include <stdlib.h> int getStandard(int array[], int low, int high) { //基准数据 int key = array[low]; while (low < high) { //因为默认基准是从左边开始,所以从右边开始比较 //当队尾的元素大于等于 基准数据 时,就一直向前挪动high指针 while (low < high && array[high] >= key) { high--; } //当找到比 array[low] 小的时,就把后面的值 array[high] 赋给它 if (low < high) { array[low] = array[high]; } //当队首元素小于等于 基准数据 时,就一直向后挪动low指针 while (low < high && array[low] <= key) { low++; } //当找到比 array[high] 大的时,就把前面的值 array[low] 赋给它 if (low < high) { array[high] = array[low]; } } //跳出循环时low和high相等,此时的low或high就是key的正确索引位置 //把基准数据赋给正确位置 array[low] = key; return low; } void quickSort(int array[], int low, int high) { //开始默认基准为 low=0 if (low < high) { //分段位置下标 int standard = getStandard(array, low, high); //递归调用排序 //左边排序 quickSort(array, low, standard - 1); //右边排序 quickSort(array, standard + 1, high); } } void display(int array[], int size) { for (int i = 0; i < size; i++) { printf("%d ", array[i]); } printf(" "); } bool check(int array[], int size) { bool res = true; for (int i = 0; i < size - 1; i++) { if (array[i] > array[i + 1]) { res = false; } } return res; } int main() { // int array[] = { 49,38,65,97,76,13,27,49,10 }; // int size = sizeof(array) / sizeof(int); // printf("%d ", size); // quickSort(array, 0, size - 1); int size = 25; //数组大小 int array[25] = { 0 }; //数组初始化 for (int i = 0; i < 100; i++) { //100个数组测试 for (int j = 0; j < size; j++) { array[j] = rand() % 1000; //随机生成数组 0~999 } printf("原来的数组:"); display(array, size); quickSort(array, 0, size - 1); printf("排序后数组:"); display(array, size); if (check(array, size) == true) { printf("排序成功 "); } printf(" "); } return 0; }