#define N 50
创新互联是专业的庄浪网站建设公司,庄浪接单;提供网站制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行庄浪网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
#includestdio.h
#includestdlib.h
#includetime.h
int main()
{
int a[N],i,j,tmp;
float avg;
srand(time(0));
for(int i=0;iN;i++)
a[i]=rand()%(500-15)+15;
//降序排列
for(i=0;iN-1;i++) for(j=i+1;jN;j++)
if(a[i]a[j]) {
tmp=a[i];a[i]=a[j];a[j]=tmp;
}
//输出数组
for(i=0;iN;i++){
printf("%4d",a[i]);
if(i%5==5-1) printf("\n"); //5个数据一行
}
}
#include stdio.h
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left,int right)
{
int i,j,t,temp;
if(leftright)
return;
temp=a[left]; //temp中存的就是基准数
i=left;
j=right;
while(i!=j)
{
//顺序很重要,要先从右往左找
while(a[j]=temp ij)
j--;
//再从左往右找
while(a[i]=temp ij)
i++;
//交换两个数在数组中的位置
if(ij)//当哨兵i和哨兵j没有相遇时
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//最终将基准数归位
第 1 章 一大波数正在靠近——排序
19
a[left]=a[i];
a[i]=temp;
quicksort(left,i-1);//继续处理左边的,这里是一个递归的过程
quicksort(i+1,right);//继续处理右边的,这里是一个递归的过程
}
int main()
{
int i,j,t;
//读入数据
scanf("%d",n);
for(i=1;i=n;i++)
scanf("%d",a[i]);
quicksort(1,n); //快速排序调用
//输出排序后的结果
for(i=1;i=n;i++)
printf("%d ",a[i]);
getchar();getchar();
return 0;
}
楼下的几个回答我怎么看也不是快速排序,所以我做了一个用快速排序法排序的程序
#includestdio.h
#includestdlib.h
#includetime.h
#define LEN 50
//快速排序(升)
void quicksup(int *arr,int low,int high)
{
int temp,l,r;
if(lowhigh)
{
l=low;
r=high;
temp=arr[low];
while(lowhigh)
{
while(lowhigharr[high]=temp)
high--;
if(lowhigh)
arr[low]=arr[high];
while(lowhigharr[low]=temp)
low++;
if(lowhigh)
arr[high]=arr[low];
}
arr[low]=temp;
quicksup(arr,l,low-1);
quicksup(arr,low+1,r);
}
}
//快速排序(降)
void quicksdown(int *arr,int low,int high)
{
int temp,l,r;
if(lowhigh)
{
l=low;
r=high;
temp=arr[low];
while(lowhigh)
{
while(lowhigharr[high]=temp)
high--;
if(high==LEN)
high--;
if(lowhigh)
arr[low]=arr[high];
while(lowhigharr[low]=temp)
low++;
if(lowhigh)
arr[high]=arr[low];
}
arr[low]=temp;
quicksdown(arr,l,low-1);
quicksdown(arr,low+1,r);
}
}
//初始化数组
void init(int *arr,int len)
{
int i;
for(i=0;ilen;i++)
{
arr[i]=rand()%1000;
}
}
//打印数组元素
void print(int *arr,int len)
{
int i;
printf("\n ");
for(i=0;ilen;i++)
printf("%4d ",arr[i]);
printf("\n");
}
int main()
{
int arr[LEN];
srand((unsigned)time(NULL));
init(arr,LEN);
printf("排序前:");
print(arr,LEN);
quicksup(arr,0,LEN);
printf("排序后(升):");
print(arr,LEN);
quicksdown(arr,0,LEN);
printf("排序后(降):");
print(arr,LEN);
return 0;
}
int a=0; //正在处理的数下标,分组时的循环1
int b; //正在循环的数下标,分组时的循环2
int num[50]; //输入的数
int out[10][5]; //分好的数,out[0]为一组
//排序部分:
while(a=49)
{
for(b=0;b=ab=49;b++)
{
if(num[b]=num[b+1])
{num[b]^=num[b+1],num[b+1]^=num[b],num[b]^=num[b+1];}; //两数互换
};
};
//分组部分:
for(a=0;a=9;a++)
{
for(b=0;b=4;b++)
{
out[a][b]=num[a*10+b];
};
};
/*输入部分和输出部分就不加入了,这个你应该会。排序部分用的是冒泡法。我手上暂时没现成的编译器,可能会有些错,不过大致应该是对的*/
你好!!
你的代码就没有输出部分呀
输出部分添加了,你看看吧
#include "stdlib.h"
#include"stdio.h"
#include"time.h"
void main()
{
int n ,a[50],i,j,t;
srand(time (NULL));
for(i=0;i50;i++)
{
a[i]=rand()%90+10;
for(j=0;ji-1;j++)
if (a[i]==a[j])
i--;
}
printf("nafter:\n");
for(i=0;i50;i++) // 下面这是打印输出
{
if (i%10==0) // 十个数字换行
printf("\n");
printf("%d ",a[i]);
}
}