c语言简单排序
⑴ c语言中三个数排序
用C语言编写通过if将3个数排序:
#include<stdio.h>/*函数头:输入输出头文件*/
void main()/*空类型:主函数*/
{
inta,b,c,t;/*定义变量的数据类型为整型*/
printf("输入3个数,中间用空格隔开:");/*输出文字提示*/
scanf("%d%d%d",&a,&b,&c);/*输入3个数字*/
if(a<b)/*判断a是否小于b*/
{t=a;a=b;b=t;}/*是,则a、b的值互换*/
if(a<c)/*判断a是否小于c*/
{t=a;a=c;c=t;}/*是,则a、c的值互换*/
if(b<c)/*判断b是否小于c*/
{t=b;b=c;c=t;}/*是,则b、c的值互换*/
printf("从小到大:%d,%d,%d ",c,b,a);/*输出从小到大排列的数*/
printf("从大到小:%d,%d,%d ",a,b,c);/*输出从大到小排列的数*/
}
(1)c语言简单排序扩展阅读
输入三个数,比较其大小,并从大到小输出。
#include<stdio.h>
int main(){
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a<b){
intflag=a;
a=b;
b=flag;
}
if(a<c){
intflag=a;
a=c;
c=flag;
}
if(b<c){
intflag=b;
b=c;
c=flag;
}
printf("%d%d%d",a,b,c);
}
⑵ C语言排序的方法
现在流行的排序有:直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序、基数排序。
对n个记录进行选择排序的方法是:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录进行交换,当i等于n时所有记录都已有序排列。
void selectsort(int data[],int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(data[j]<data[k]) k=j;
if(k!=i)
{
temp=data[i];data[i]=data[k];data[k]=temp;
}//if
}//for
}//for
}//selectsort
⑶ c语言简单的排序问题
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineSWAP(x,y){intt;t=x;x=y;y=t;}
#defineMAX10
voidsort(intnumber[],intleft,intright);
intquicksort(intnumber[],intleft,intright);
intmain(){
intnumber[MAX],i;
srand(time(0));
for(i=0;i<MAX;i++){
number[i]=(int)rand()%100;
}
printf("请输出排排列前的数: ");
for(i=0;i<MAX;i++)
printf("%3d",number[i]);
printf(" ");
sort(number,0,MAX-1);//函数调用
printf("请输出排排列后的数: ");
for(i=0;i<MAX;i++)
printf("%3d",number[i]);
printf(" ");
return0;
}
intquicksort(intnumber[],intleft,intright){
inti,s,j;
i=left-1;
s=number[right];
for(j=left;j<right;j++){
if(number[j]<=s){
i++;
SWAP(number[i],number[j]);
}
}
SWAP(number[i+1],number[right]);
return(i+1);
}
voidsort(intnumber[],intleft,intright){
intq;
if(left<right){
q=quicksort(number,left,right);
sort(number,left,q-1);//注意这里
sort(number,q+1,right);//注意这里
}
}
好好贴代码会死吗……
⑷ c语言排序法
这是简单选择排序。但你图中的是未经优化的,因为移动次数和比较次数的时间复杂度都是O(n²),而优化了的选择排序的移动次数的时间复杂度最优可以达到O(n)
如下图参考自《数据结构(C语言版)》——清华大学出版社
如图,如有疑问或不明白请追问哦!
⑸ C语言10种排序方法
1.比较法2.选择排序3.冒泡排序4.希尔排序5.快速排序6.堆排序7.合并排序8.基数排序9.折半插入排序10.直接插入排序
⑹ C语言 简单的从大到小排序问题
这是冒泡排序法。
第一个循环的控制变量应该是 i < N - 1 ,也就是 两两比较的 前一个数 最多只到 倒数第二个;
而 第二个 循环的控制变量应该是 j < N ,表示 两两比较的后一个数, 要直到最后一个数。
如有帮助,烦请点采纳,谢谢!
⑺ 如何用C语言编写一个排序程序
楼上的用的是C++
若单纯的用C那就是这样
#include<stdio.h>
#define
print
"NO.%d
%d
%d
%d
%d
%3.2f
%3.2f\n",1+i,stu[i].num,stu[i].mat,stu[i].ENG,stu[i].com,stu[i].aver,stu[i].total//宏定义节约时间
struct
student
{
int
num;
int
mat;
int
ENG;
int
com;
float
aver;
float
total;
}stu[10];//定义结构体变量
void
main()
{
int
i;
void
take_turn_print(struct
student
stu1[10])
;
float
sum(int
x,int
y,int
z);//声明求和函数
for(i=0;i<10;i++)
scanf("%d%d%d%d",&stu[i].num,&stu[i].mat,&stu[i].ENG,&stu[i].com);
for(i=0;i<10;i++)
{
stu[i].total=sum(stu[i].mat,stu[i].ENG,stu[i].com);//调用求和函数
stu[i].aver=stu[i].total/3;
}
take_turn_print(stu);//调用排序
打印函数
}
void
take_turn_print(struct
student
stu1[10])
{
void
change(int
*x,int
*y);//声明换位函数
void
change1(float
*x,float
*y);//声明换位函数
int
i,j;
for(j=0;j<9;j++)//冒泡排序
为理解简单
就没用别的排序方法
哈哈
{
for(i=0;i<9-j;i++)
{
if(stu1[i].aver<stu1[i+1].aver)
{
change(&stu1[i].num,&stu1[i+1].num);//
值交换
change(&stu1[i].mat,&stu1[i+1].mat);//
值交换
change(&stu1[i].ENG,&stu1[i+1].ENG);//
值交换
change(&stu1[i].com,&stu1[i+1].com);//
值交换
change1(&stu1[i].aver,&stu1[i+1].aver);//
值交换
change1(&stu1[i].total,&stu1[i+1].total);//
值交换
}
}
}
for(i=0;i<10;i++)
printf(print);//打印
}
void
change(int
*x,int
*y)
{
int
i;
i=*x;
*x=*y;
*y=i;//利用指针做变量替换
}
void
change1(float
*x,float
*y)
{
float
i;
i=*x;
*x=*y;
*y=i;//利用指针做变量替换
}
float
sum(int
x,int
y,int
z)
{
float
i;
i=(float)(x+y+z);
return(i);
}
前几天也是帮同学做这样的题
一模一样
看来你也是WH大学的
⑻ C语言选择法排序
#include<stdio.h>
#defineM 5
void main()
{
int b[M],i,j,t,k;
for(i=0;i<M;i++)
scanf("%d",&b[i]);
for(i=0;i<M-1;i++)
{
for(k=i,j=i+1;j<M;j++)
if(b[k]<b[j])
k=j;
if(i!=k)
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
}
for(i=0;i<M;i++)
printf("%d ",b[i]);
}
错在大括号位置加错了。
代码:
#include<stdio.h>
void SelectionSort(int *num,int n)
{
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i < n-1;i++)
{
min = i;//每次讲min置成无序组起始位置元素下标
for(j = i;j < n;j++)//遍历无序组,找到最小元素。
{
if(num[min]>num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置
{
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
}
}
}
(此处空一行)
int main()
{
int num[6] = {5,4,3,2,9,1};
int i = 0;
SelectionSort(num,6);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。
for(i = 0;i < 6;i++)
{
printf("%d ",num[i]);
}
return 0;
}
⑼ C语言中有哪些经典的排序方法
选择排序的原理是,每次从待排序数字中挑选出最大(最小)数字,放在有序序列的末尾。实际操作中,只需要在这个数组中将挑出来的数字与前面的数字交换即可。
例如:
4
1 5
2 3
找到最小的1,1和4交换
1
4 5
2
3
找到最小的2,2和4交换
1
2
5
4
3
找到最小的3,3和5交换
1
2
3
4
5
找到最小的4,4和4交换(不交换也可)
可见,选择排序需要一个双重循环来完成,因此它的复杂度是o(n^2)
在数据量比较大时,不建议使用这种排序方法。
其他排序方法有很多,你甚至可以自己根据不同数据规模设计不同的排序方法。比较常见的有冒泡排序,插入排序(这两种和选择排序一样,都是o(n^2)),二分法插入排序(降低了一些复杂度,但是涉及到大规模数据移动,效率依然不高),快速排序(平均复杂度o(nlogn),但是不稳定,最坏情况o(n^2)),随机化快速排序(很大程度上避免了最坏情况的出现),堆排序(o(nlogn),编程复杂度高),基数排序(理论复杂度o(n),实际要比这个慢。甚至能应付字符串排序,但是编程复杂度高,牵扯到其他数据结构),桶排序(o(n),编程简单,效率高,但是应付的数据范围不能太大,受到内存大小的限制)。
平时比较常用的就是快速排序,程序简单,效率也可以接受。
这是我了解的一些东西,希望对你有帮助。
⑽ 寻求c语言5种以上的简单的排序方法
//直接插入排序
voidStaInsertSort(inta[],intn)
{
inti,j,tmp;
for(i=1;i<n;++i)
{
tmp=a[i];
j=i-1;
while(j>=0&&tmp<a[j])
{
a[j+1]=a[j];
--j;
}
a[j+1]=tmp;
}
}
/*折半排序*/
voidMidSort(inta[],intn)
{
inti,j;
intlow,high,mid;
inttmp;
for(i=1;i<n;i++)
{
tmp=a[i];
low=0,high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>tmp)
high=mid-1;
else
low=mid+1;
}
low=high,high=i;
while(high>low+1)
{
a[high]=a[high-1];
--high;
}
a[low+1]=tmp;
}
}
/*冒泡排序*/
voidMaoPaoSort(inta[],intn)
{
inti,j;
inttmp;
for(i=0;i<n-1;++i)
{
for(j=i+1;j<n;++j)
{
if(a[i]>a[j])
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}
}
/*快速排序*/
voidQuickSort(inta[],intlow,inthigh)
{
inti,j;
inttmp;
if(low<high)
{
i=low,j=high;
tmp=a[low];
while(i<j)
{
while(i<j&&a[j]>=tmp)
--j;
a[i]=a[j];
while(i<j&&a[i]<=tmp)
++i;
a[j]=a[i];
}
a[i]=tmp;
QuickSort(a,low,i-1);
QuickSort(a,i+1,high);
}
}
/*选择排序*/
voidSelectSort(int*a,intn)
{
inti,j,k;
inttmp;
for(i=0;i<n-1;++i)
{
k=i;
for(j=i+1;j<n;++j)
if(a[k]>a[j])
k=j;
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
/*堆排序*/
voidSift(inta[],intlow,inthigh)//堆调整函数
{
inti=low,j=2*i+1;
inttmp=a[i];
while(j<=high)
{
if(j<high&&a[j]<a[j+1])
++j;
if(tmp<a[j])
{
a[i]=a[j];
i=j;
j=2*i+1;
}
else
break;
}
a[i]=tmp;
}
voidHeapSort(inta[],intn)//堆排序函数
{
inti;
inttmp;
for(i=n/2-1;i>=0;--i)
Sift(a,i,n-1);
for(i=n-1;i>=1;--i)
{
tmp=a[0];
a[0]=a[i];
a[i]=tmp;
Sift(a,0,i-1);
}
}