巧妙利用快速排序法的原理求一个数组中的第10大元素
发布时间:2020-12-14 03:33:11 所属栏目:大数据 来源:网络整理
导读://快速排序法int QuickSort_process3(int *a,int low,int high){int l,h,temp;l = low;h = high;temp = a[low];while (l h){while (l ha[h] = temp)--h;if (l h)a[l] = a[h];while (l ha[l] temp)++l;if (l h)a[h] = a[l];}a[h] = temp;return h;}void Quick
//快速排序法 int QuickSort_process3(int *a,int low,int high) { int l,h,temp; l = low; h = high; temp = a[low]; while (l < h){ while (l< h&&a[h] >= temp) --h; if (l < h) a[l] = a[h]; while (l < h&&a[l] < temp) ++l; if (l < h) a[h] = a[l]; } a[h] = temp; return h; } void QuickSort3(int *a,int high) { int pos; if (low < high){ pos = QuickSort_process3(a,low,high); QuickSort3(a,pos-1); QuickSort3(a,pos+1,high); } } int getTop_N_Numbers(int *a,int n) { int pos,curpos,e; do{ printf("Please input a numbers(less than %d and bigger than 0).n",n); scanf("%d",&e); } while (!(e<=n&&e>=1)); pos = n - e;/*在一个从小到大排序的数组中,最大第e个数的下标恰好是n-e*/ curpos = QuickSort_process3(a,n - 1);/*一趟快排结束时,肯定会有一个已经确定了位置的数,返回它的下标*/ while (1){ if (curpos == pos){/*当要找的第几最大的数的位子已经确定后,说明,比它还要大的数也已经确定了,就不再排序了,直接返回*/ break; } else if (curpos < pos){/*在后半部找*/ curpos = QuickSort_process3(a,curpos+1,n-1); } else{/*在前半部分找*/ curpos = QuickSort_process3(a,curpos-1); } } return pos; } void show_TopN_numbers(int *a,int n) { int k = getTop_N_Numbers(a,n); int i; printf("The Top %d numbers are :n",n-k); for (i = k; i < n; ++i) printf("%d ",a[i]); printf("n"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |