快速排序算法

来源:互联网 发布:彩票代购源码 编辑:程序博客网 时间:2024/06/05 16:54

快速排序算法

快速排序算法(用递归和非递归的方式实现)

/*假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是:   1)设置两个变量I、J,排序开始的时候 I=0,J=N-1;   2)以第一个数组元素作为关键数据,赋值给X,即X=A[0];   3)从J开始向前搜索,即由后开始向前搜索,找到第一个小于X的值,两者交换;   4)从I开始向后搜索,即由前开始向后搜索,找到第一个大于X的值,两者交换;   5)重复第3、4步,直到I=J;*/#include <stdio.h>/****** 将快速排序的一趟放在内部(递归方式)*********/void quicksort(int *a, int low, int high){int i=low;int j=high;int key=a[i];if(low<high){while(i<j){while((i<j) && (a[j]>=key)){j--;}a[i]=a[j];while((i<j) && (a[i]<=key)){i++;}a[j]=a[i];}a[i]=key;quicksort(a, low, i-1);quicksort(a, j+1, high);}}/**快速排序的一趟排序**/int quick_once(int *a, int low, int high){int key=a[low];while(low < high){while((low<high) && (a[high]>=key))high--;a[low] = a[high];while((low<high) && (a[low]<=key))low++;a[high] = a[low];}a[low]=key;return low;}/****递归方式***/void quick_sort(int *a, int low, int high){int k;if(low < high){k=quick_once(a, low, high);quick_sort(a, low, k-1);quick_sort(a, k+1, high);}}/*****非递归方式******/void quicksort_not(int *a, int low, int high){int stack[20];int top=0;int k;stack[++top]=low;stack[++top]=high;while(top>0){high=stack[top--];low=stack[top--];k=quick_once(a, low, high);if(low<k-1){stack[++top]=low;stack[++top]=k-1;}if(high>k+1){stack[++top]=k+1;stack[++top]=high;}}}void main(){int i=0;    int a[6] = {23,1,21,4,19, 3};    quicksort_not(a, 0, 5);    //quick_sort(a, 0, 5);    for(i=0;i<6;i++)        printf("%d ",a[i]);    printf("\n");}


0 0
原创粉丝点击