当前位置:首页 » 编程语言 » c语言简单排序

c语言简单排序

发布时间: 2022-04-26 15:33:28

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);
}
}

热点内容
网吧u盘拒绝访问 发布:2025-05-16 14:13:50 浏览:259
无线网检查网络配置是怎么回事 发布:2025-05-16 14:04:03 浏览:220
网络爬虫python代码 发布:2025-05-16 14:03:26 浏览:516
汽车小组件怎么弄到安卓桌面 发布:2025-05-16 13:51:12 浏览:220
linuxg编译器下载 发布:2025-05-16 13:50:58 浏览:776
centosc编译器 发布:2025-05-16 13:50:17 浏览:948
安卓手机如何变换桌面 发布:2025-05-16 13:39:33 浏览:515
sql存储过程命令 发布:2025-05-16 13:17:54 浏览:146
用纸做解压小玩具西瓜 发布:2025-05-16 13:04:09 浏览:936
局域网xp无法访问win7 发布:2025-05-16 13:03:58 浏览:943