从快速排序看递归

来源:互联网 发布:电子图章制作软件 编辑:程序博客网 时间:2024/06/07 15:05

先看一下快速排序算法

#include <stdio.h>void quicksort(int array[], int min, int max);int partition(int array[], int min, int max){int p;p = array[min];//int len = max;while (min < max){while (array[max] >= p && min < max){max--;}array[min] = array[max];while (array[min] <= p && min < max){min++;}array[max] = array[min];}array[min] = p;//printf("分界:%d\n", min);returnmin;}void quicksort(int array[], int min, int max, int n){int p;p = partition(array, min, max);//printf("p = %d\n", p);printf("执行结果:");for (int i = 0; i <= 11; i++){printf("%d ", array[i]);}printf("\n");if (min < max){printf("第%d次前序递归执行:", n);printf("quicksort(array, %d, %d)\n", min, p - 1);quicksort(array, min, p - 1, n);n++;//partition(array, p+1 , max);printf("第%d次后序递归执行:", n);printf("quicksort(array, %d, %d)\n", p + 1, max);quicksort(array, p + 1, max, n);}}int main(){int arr[] = { 5, 9, 2, 7, 8, 3,1,4, 11, -10, 10, 0 };//printf("%d\n", sizeof(arr) / sizeof(arr[0]));int min = 0;int max = sizeof(arr) / sizeof(arr[0]) - 1;//int p = partition(arr, min, max);//printf("min的值为:%d\n", min);//partition(arr, min, p);printf("进入递归之前执行:");printf("quicksort(array, %d, %d)\n", 0, 11);quicksort(arr, min, max, 1);return 0;}


打印结果:

进入递归之前执行:quicksort(array, 0, 11)执行结果:0 -10 2 4 1 3 5 8 11 7 10 9第1次前序递归执行:quicksort(array, 0, 5)执行结果:-10 0 2 4 1 3 5 8 11 7 10 9第1次前序递归执行:quicksort(array, 0, 0)执行结果:-10 0 2 4 1 3 5 8 11 7 10 9第2次后序递归执行:quicksort(array, 2, 5)执行结果:-10 0 1 2 4 3 5 8 11 7 10 9第2次前序递归执行:quicksort(array, 2, 2)执行结果:-10 0 1 2 4 3 5 8 11 7 10 9第3次后序递归执行:quicksort(array, 4, 5)执行结果:-10 0 1 2 3 4 5 8 11 7 10 9第3次前序递归执行:quicksort(array, 4, 4)执行结果:-10 0 1 2 3 4 5 8 11 7 10 9第4次后序递归执行:quicksort(array, 6, 5)执行结果:-10 0 1 2 3 4 5 8 11 7 10 9第2次后序递归执行:quicksort(array, 7, 11)执行结果:-10 0 1 2 3 4 5 7 8 11 10 9第2次前序递归执行:quicksort(array, 7, 7)执行结果:-10 0 1 2 3 4 5 7 8 11 10 9第3次后序递归执行:quicksort(array, 9, 11)执行结果:-10 0 1 2 3 4 5 7 8 9 10 11第3次前序递归执行:quicksort(array, 9, 10)执行结果:-10 0 1 2 3 4 5 7 8 9 10 11第3次前序递归执行:quicksort(array, 9, 8)执行结果:-10 0 1 2 3 4 5 7 8 9 10 11第4次后序递归执行:quicksort(array, 10, 10)执行结果:-10 0 1 2 3 4 5 7 8 9 10 11第4次后序递归执行:quicksort(array, 12, 11)执行结果:-10 0 1 2 3 4 5 7 8 9 10 11

由递归的顺序:

1 执行quicksort(arr, 0, 9,0) 执行到quicksort(array, min, p-1,n) 函数会回到开始的位置;执行quicksort(array, 0, 5);
2,再重复1 quicksort(array, 0, 0) 此时第一
2 执行



原创粉丝点击