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

c语言排序程序

发布时间: 2022-08-22 08:14:49

⑴ 用c语言编程:用选择法对10个整数排序,10个整数用scanf函数输入

1、打开visual C++ 6.0,准备一个空白的c语言文件,引入头文件,在main函数中定义变量和数组:

⑵ c语言 选择法排序

void sa(int array[],int n)
{
int i,j,k,temp;
for(i=0;i<10;i++)
{
k=i; //保存i的值,用k来进行循环排序
for(j=i+1;j<n;j++) //将第i个元素后面的元素与第i个元素进行比较
if(array[j]<array[k]) //如果第k=i个元素后面的元素小于i号元素,交换两个元素的标号, 这样就将最小元素的标号放到最前面
k=j; //交换标号
temp=array[k]; //循环结束后,交换两个标号下的元素的值
array[k]=array[i];
array[i]=temp;
}
}
这个程序实现的是由小到大的排序。第二个循环里面,就是i号元素后面最小的元素对应的标号放到k中,在交换当前元素与k号元素中的值,实现由大到小排序

⑶ 如何用C语言给字母排序

这个其实就是排序,因为char类型跟int类型一样的也是数字,可以比较大小的,然后输出就可以了。

⑷ 用C语言编写,输入10个数按降序排列

#include "stdafx.h"
#include "stdio.h"

int main(int argc, char* argv[])
{
int a[10];
int i,j,d;
printf("请输入十个整数,用空格隔开:");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
{
if(a[i]<a[j])
{
d=a[i];
a[i]=a[j];
a[j]=d;
}
}
}
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
用选择法。

⑸ C语言编写关于排列的程序

#include
<stdio.h>
#include
<time.h>
#include
<stdlib.h>
void
Swap(int*
a,
int*
b)
//
交换
{
int
t;
t
=
*a;
*a
=
*b;
*b
=
t;
}
void
AsceSort(int*
begin,
int*
end)
//
升序排序
{
for(int*
p
=
begin;
p
!=
end;)
if(p
==
begin
||
*(p-1)
<=
*p)
++p;
else
Swap(p---1,
p);
}
void
DescSort(int*
begin,
int*
end)
//
降序排序
{
for(int*
p
=
begin;
p
!=
end;)
if(p
==
begin
||
*(p-1)
>=
*p)
++p;
else
Swap(p---1,
p);
}
void
Print(int*
a,
int
n)
//
10个一行输出
{
int
i;
for(i
=
0;
i
<
n;
++i)
{
if(i
!=
0
&&
i
%
10
==
0)
putchar('\n');
printf("%4d
",
a[i]);
}
putchar('\n');
}
#define
N
1000
int
main()
{
int
a[N],
i;
srand(time(0));
for(i
=
0;
i
<
N;
++i)
a[i]
=
rand()
%
1001
+
1;
puts("整理前排列:");
Print(a,
N);
puts("递增排列:");
AsceSort(a,
a
+
N);
Print(a,
N);
puts("递减排列:");
DescSort(a,
a
+
N);
Print(a,
N);
return
0;
}

⑹ c语言排序的方法

排序主要分为以下几种。
1.冒泡排序:通过循环比较前后数的大小进行交换。最后使得数组有序。
2.快速排序:首先将第一个数作为一个基准,然后循环,将前半部分大于该数的与后半部分小于该数的进行交换,使得以该数为分界线,前面的小于该数,后面的大于该数,然后分前后两部分继续。

⑺ c语言三种排序

常用的c语言排序算法主要有三种即冒泡法排序、选择法排序、插入法排序

一、冒泡排序冒泡排序:

是从第一个数开始,依次往后比较,在满足判断条件下进行交换。代码实现(以降序排序为例)

#include<stdio.h>

int main()

{

int array[10] = { 6,9,7,8,5,3,4,0,1,2 };

int temp;

for (int i = 0; i < 10; i++)

{//循环次数

for (int j = 0; j <10 - i-1; j++)

{

if (array[j] < array[j+1])

{//前面一个数比后面的数大时发生交换 temp = array[j];

array[j] = array[j+1];

array[j + 1] = temp;

}

}

} //打印数组 for (int i = 0; i < 10; i++) printf("%2d", array[i]); return 0;}}

二、选择排序以升序排序为例:

就是在指定下标的数组元素往后(指定下标的元素往往是从第一个元素开始,然后依次往后),找出除指定下标元素外的值与指定元素进行对比,满足条件就进行交换。与冒泡排序的区别可以理解为冒泡排序是相邻的两个值对比,而选择排序是遍历数组,找出数组元素与指定的数组元素进行对比。(以升序为例)

#include<stdio.h>

int main()

{

int array[10] = { 6,9,7,8,5,3,4,0,1,2 };

int temp, index;

for (int i = 0; i < 9; i++) {

index = i;

for (int j = i; j < 10; j++)

{

if (array[j] < array[index])

index = j;

}

if(i != index)

{

temp = array[i];

array[i] = array[index];

array[index] = temp;

}

for(int i=0;i<10:i++)

printf("%2d"array[i])

return 0;

}

三、快速排序

是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

void QuickSort(int* arr, int size)

{

int temp, i, j;

for(i = 1; i <size; i++)

for(j=i; j>0; j--)

{

if(arr[j] <arr[j-1])

{

temp = arr[j];

arr[j]=arr[j-1];

arr[j-1]=temp;

}

}

}

⑻ C语言:编写一个程序用冒泡排序实现升序排列

1、首先打开一个空白的C语言文件,首先先定义一组待排序的数列以及各个变量,接着就是用来处理排序的逻辑:

⑼ 如何用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>
void main()
{
int a[10];
int i,j,t;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
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<=9;i++)
printf("%d ",a[i]);
printf("\n");/*下一次循环时换行*/
}
也没有多大的错误
小心点,C是分语句执行的,到了“;”就是一条语句,除非你用“{}”,这样可以将几个语句合并为一条语句。可以简单这么理解。

热点内容
在配置更新的时候没电关机怎么办 发布:2024-05-18 20:36:10 浏览:927
win7访问win2000 发布:2024-05-18 20:27:41 浏览:387
青岛人社局密码多少 发布:2024-05-18 20:19:10 浏览:733
无法存储呼叫转移 发布:2024-05-18 20:18:30 浏览:126
数据库的调优 发布:2024-05-18 20:18:29 浏览:346
sqlserver注册表清理 发布:2024-05-18 20:13:14 浏览:991
linux删除连接 发布:2024-05-18 20:06:56 浏览:822
linux搭建云服务器平台 发布:2024-05-18 19:52:21 浏览:402
安卓怎么关闭美易订阅 发布:2024-05-18 19:29:16 浏览:643
苹果手机配置代理服务器怎么开 发布:2024-05-18 19:29:07 浏览:231