加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

巧妙利用快速排序法的原理求一个数组中的第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");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读