用c语言编写程序 使用快速排序算法对数组中的数据进行 降序 排序(要求随机生成10个1-99之间的要排序的数据,放入数组中。)

qq_36180565 2016-12-13 10:40:26
要求随机生成10个1-99之间的要排序的数据,放入数组中。一定是降序的
求全代码 谢谢了
...全文
3301 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
du56du 2016-12-16
  • 打赏
  • 举报
回复
paschen 2016-12-13
  • 打赏
  • 举报
回复
生成随机数很方便,你直接用rand就行,我就不写代码了 快速排序给你个我之前写的,分为递归版与非递归版,你随便先一个就行 里面又分升序与降序,如果你要降序,把升序那部分的代码删除了
//快速排序(递归版)
void QSort(int* a,int left,int right)
{
	int tmp = a[left];
	int p = left;
	int i = left,j = right;
	while(i<=j)
	{
		//升序
		{
			while(a[j]>=tmp && j>=p)
				j--;
			if(j>=p)
			{
				a[p] = a[j]; //比划分元小的交换到左边
				p = j;
			}
			while(a[i]<=tmp && i<=p)
				i++;
			if(i<=p)
			{
				a[p] = a[i]; //比划分元大的交换到右边
				p = i;
			}
		}
		
		//降序
		{
			while(a[j]<=tmp && j>=p)
				j--;
			if(j>=p)
			{
				a[p] = a[j]; //比划分元大的交换到左边
				p = j;
			}
			while(a[i]>=tmp && i<=p)
				i++;
			if(i<=p)
			{
				a[p] = a[i]; //比划分元小的交换到右边
				p = i;
			}
		}
	}
	a[p] = tmp;
	if(p-left>1)
		QSort(a,left,p-1);
	if(right-p>1)
		QSort(a,p+1,right);
}

//快速排序(非递归版)
int Partition(int* a,int left,int right)
{
	int pivot = a[right];
	while(left<right)
	{
		//升序
		{
			while(a[left]<pivot && left<right)
				left++;
			if(left<right)
				a[right--] = a[left];
			while(a[right]>pivot && left<right)
				right--;
			if(left<right)
				a[left++] = a[right];
		}
		
		
		//降序
		{
			while(a[left]>pivot && left<right)
				left++;
			if(left<right)
				a[right--] = a[left];
			while(a[right]<pivot && left<right)
				right--;
			if(left<right)
				a[left++] = a[right];
		}
	}
	a[left] = pivot;
	return left;
}
qq_36180565 2016-12-13
  • 打赏
  • 举报
回复
要 快速排序 的 怎么把下面的快速排序改为降序的 (代码非原创) #include<stdio.h> #include<stdlib.h> #include<time.h> #define NUMBER 10 //NUMBER为数组的大小 void quickSort(int [],int,int); void display(int [],int); int main() { int num[NUMBER]; int randValue = 0; int i,temp; srand(time(NULL)); //随机生成NUMBER个1-100的随机数 for(i=0;i<NUMBER;i++) { randValue=1+(int)rand()%100; num[i]=randValue; } srand(time(NULL)); printf("使用快速排序算法\n"); printf("排序前:"); display(num,NUMBER);//打印数组内容 quickSort(num,0,NUMBER-1);//调用快速排序算法 printf("排序后:"); display(num,NUMBER); return 0; } void quickSort(int num[],int lower,int upper) { int partition(int [],int ,int); int pivot; //递归调用 pivot=partition(num,lower,upper); if(lower < pivot) quickSort(num,lower,pivot-1); if(pivot < upper) quickSort(num,pivot+1,upper); } int partition(int num[],int left,int right) { int pivot,temp; pivot = num[left]; while(left<right) { //从右往左扫描 while(num[right]>=pivot && left<right) right--; if(right!=left) { num[left]=num[right]; left++ ; } //从左往右扫描 while(num[left]<=pivot && left<right) left++; if(right!=left) { num[right]=num[left]; right--; } } num[left]=pivot; return(left); } //打印数组 void display(int num[],int count) { int i; for(i=0;i<count;i++) { printf("%d\t",num[i]); } printf("\n"); }
小灸舞 版主 2016-12-13
  • 打赏
  • 举报
回复
参考:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a[10];
int i, j, t;
srand(time(NULL));
for (i = 0; i < 10; i++)
a[i] = rand() % 100;
for (i = 0; i < 9; i++)
for (j = i + 1; j < 10; j++)
if (a[i]<a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
}
qq_36180565 2016-12-13
  • 打赏
  • 举报
回复
规定是要数组的 不用指针 能写个数组的吗?麻烦你了

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧