您的当前位置:首页正文

快速排序算法——C递归

来源:好兔宠物网
快速排序算法——C递归

三个函数

基准插⼊函数:int getStandard(int array[],int low,int high)(返回基准位置下标)

递归排序函数:void quickSort(int array[],int low,int high)主函数:int main()

#include #include

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(\"\\n\");}

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 \\n\

// 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(\"排序成功\\n\"); }

printf(\"\\n\"); } return 0;}

因篇幅问题不能全部显示,请点此查看更多更全内容