#include <stdio.h> #include <stdlib.h> /* 快速排序算法,最坏情况的运行时间为O(n*n),平均运行时间为O(n*lgn) */ void exchage(int *a,int i,int j)//交换数组两个数的位置 { int temp; temp=a[i]; a[i]=a[j]; a[j]=temp; } int partition(int *a,int p,int r)//对数组a[p...r]进行就地重排,返回大小为中间的元素位置。 { int i,j,x; x=a[r];//记录当前数组最后一个位置,作为分界的主元元素 i=p-1;//i用来记录当前的第一个比主元大的元素位置 j=p; for(j=p;j<r;j++) { if(a[j]<=x)//每当有元素比主元小时,将该元素与最前面的大元素换位置,并移动指示i { i++; exchage(a,i,j);//交换a[i]与a[j] } } exchage(a,i+1,r);//遍历结束后,将主元与最前面的大元素交换位置,保证交换后,左边都小,右边都大 return i+1;//返回分割的位置 } void quicksort(int *a,int p,int r)//递归进行快速排序 { int q; if(p<r) { q=partition(a,p,r);//产生q的时候,a[q]已经位于正确的位置,再递归排序两边的元素 quicksort(a,p,q-1); quicksort(a,q+1,r); } } int main(int argc, char *argv[]) { int a[1000]={0}; int i,n; printf("输入要排序的数量\n"); scanf("%d",&n); printf("输入n个要排序的数\n"); for(i=1;i<=n;i++) scanf("%d",&a[i]); quicksort(a,1,n); printf("快速排序后\n"); for(i=1;i<=n;i++) printf("%d ",a[i]); system("PAUSE"); return 0; }
算法入门--快速排序1
最新推荐文章于 2024-09-18 09:18:36 发布