对八个元素的序列进行快速排序,在最好的情况下,元素间的比较次数为13
#include<stdio.h> #define M 8 int cnt=0; int quickp(int a[],int l,int r) { int i=l,j=r,k; int tmp=a[l],cnt2=0; while(i!=j) {//左右未遍历完成 while(j>i && a[j]>tmp) { j--; cnt++; cnt2++; } a[i]=a[j];//a[j]:从右边数比基准小的——基准变为比基准小的数 while(i<j && a[i]<tmp) { i++; cnt++; cnt2++; } a[j]=a[i];//a[i]:从左边数比基准大的——比基准小的数变成比基准大的数 } printf("l=%d,i=%d,r=%d,cnt=%d,cnt2=%d\n",l,i,r,cnt,cnt2); a[i]=tmp;//找到基准的最后位置,赋值 for(k=0;k<M;k++) printf("%d ",a[k]);printf("\n"); return i;//返回基准的最后位置 } void qp(int a[],int l,int r) { if(l<r) { int i=quickp(a,l,r); printf("%d %d / %d %d\n",l,i-1,i+1,r); qp(a,l,i-1); qp(a,i+1,r); } } int main() { int a[M],i,j,k; for(i=0;i<M;i++) scanf("%d",&a[i]); qp(a,0,M-1); for(i=0;i<M;i++) printf("%d ",a[i]); printf("\n%d",cnt); return 0; }View Code
标签:tmp,cnt,int,while,cnt2,相关,排序,快速 From: https://www.cnblogs.com/zxqxwnngztxx/p/17766215.html