永发信息网

c语言编程。。。输入一数组,按从大到小的顺序排列(提示:可用选择排序、冒泡排序或插入排序的任意一种)。

答案:4  悬赏:0  手机版
解决时间 2021-01-12 23:38
c语言编程。。。输入一数组,按从大到小的顺序排列(提示:可用选择排序、冒泡排序或插入排序的任意一种)。
最佳答案
选择排序:选择法排序是一种简单的容易实现的对数据排序的算法。
以整形数组元素为例,有数组A[10](以C语言为例描述),即A[0],A[1],…,A[8],A[9](假设其元素均互不相同)。要求对其元素排序使之递增有序。
首先以一个元素为基准,从一个方向开始扫描,比如从左至右扫描,以A[0]为基准。
接下来从A[0],…,A[9]中找出最小的元素,将其与A[0]交换。
然后将基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。
一直进行到基准位置移到数组最后一个元素时排序结束(此时基准左边所有元素均递增有序,而基准为最后一个元素,故完成排序)。
以下为一个用C描述的函数实现上述排序:
void sort(int array[],int n)
{ // n 为数组元素个数
int i,j,k,temp; // i 为基准位置,j 为当前被扫描元素位置,k 用于暂存出现的较小的元素的位置
for(i=0;i {
k=i; //初始化为基准位置
for(j=i+1;j {
if (array[j] { temp=array[k];
array[k]=array;
rray=temp; // 将此趟扫描得到的最小元素与基准互换位置
}
} //for
}
}
其实现相对简单,效率比较低,时间复杂度为O(n2) (n 的平方) ,为就地排序。
冒泡排序法:基本思路:对尚未排序的各元素从头到尾依次比较相邻的两个元素是否逆序(与欲排顺序相反),若逆序就交换这两元素,经过第一轮比较排序后便可把最大(或最小)的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了你所要的顺序。可以看出如果有 n 个元素,那么一共要进行 n-1 轮比较,第 i 轮要进行 j=n-i 次比较。(如:有5个元素,则要进行5-1轮比较。第3轮则要进行5-3次比较)
下面以C语言为例子给大家一个明确的表示:
#include
void main()
{
int a[10];
int i,j,t;
printf("输入10个整数:\n");
for( i = 0; i < 10; i ++ )
scanf("%d",&a[ i ]); //依次输入10个整数
for( j = 0; j < 9; j ++ ) //进行9轮排序 即n-1次
{
for( i = 0; i < 9-j; i ++) //每轮进行n-1-j 次比较,最多n-1-j 次交换
if( a[ i ] > a[ i + 1 ] )
{
t = a[ i ] ;
a[ i ] = a[ i + 1 ]; //小的沉底,大的上浮
a[ i + 1 ] = t;
}
}
printf("排序结果:");
for( i = 0; i < 10; i ++ ) //依次输出排序结果
printf("%d\t",a[ i ]);
printf("\n");
}
PASCAL为例子
procedure Bubble_Sort(var L:List);
vari,j:position;
begin
for i:=First(L) to Last(L)-1 do
for j:=First(L) to Last(L)-i do
if L[j]>L[j+1] then 4 swap(L[j],L[j+1]);
//交换L[j]和L[j+1]
end;
下面使用c++语言编写
#include
void main()
{
int a[n],i,j,temp;
cout<<"请输入数字:"< for(i=0;i<=n;i++)
cin>>a; //依次输入n个整数
for(i=0;i {
for(j=i+1;j if(a { temp=a[j];
a[j]=a;
a=temp;
}
cout< }

C语言中的排序方法选择方法是首先从要选择的数中选择最大(或最小)的数,将它放在第一个位置,然后从剩下的数中选择最大(或最小)的数放在第二个位置,直到最后从剩下的两个数中选择最大(或最小)的数放在倒数第二个位置,剩下的一个数放在最后位置,完成排序。
全部回答
可以申请一个临时变量来帮助排序。
int a[5] = {5,9,21,4,3};
int temp; //临时变量
int i,j;
for(i=0;i<5;i++)
for(j=0;j<4;j++)
{
temp = a[j];
if(a[j] > a[j+1])
{
a[j] = a[j+1];
a[j+1] = temp;
}
}
一个一个的进行比较,设一个min,并把第一个值赋给它,当遇到比他小的数的时候进行互换,直到最后。
#include
main()
{
int i,j,temp;
int a[10];
for(i=0;i<10;i++)
scanf ("%d",&a[i]);
for(j=0;j<=9;j++)
{
for (i=0;i<10-j;i++)
if (a[i] { temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=1;i<11;i++)
printf("%d\n",a[i] );
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
金属冲压件有哪些优点
pix4dmapper 1.4 收费版和免费版的区别
有谁知道铁路总公司纪委联系方式,我要举报铁
g224是否在青岛北上车
下列各组物质中,在一定条件下都能跟铁反应的
sam used to get up late on saturday?的问题
求几首曲风旋律类似Diamond Eyes——shinedow
奥迪a6l故障码g395什么意思
问个地名(浙江绍兴安昌的进)
稳定结构8,但为什么会失去2或3个电子形成铁
钱包边边角角都掉皮了,怎么弄?
赖茅酒53度价格多少钱
有谁相信心理测试的吗?
井上有一的人物评价
什么是短语?
推荐资讯
5.16米等于多少米等于多少分米等于多少
reco YORK RWB299E 螺杆制冷机报警: oil log
大唐到广州南火车站坐几号线地铁
意力小钢炮310.2书架箱好吗
PT100的温度采集电路
上海福大副食品有限公司分公司怎么样?
二次函数y=-3x2+5x-6的图象的开口方向是_____
vivox9用什么软件root
青春“Youth”,Samuel Ullman这首诗请问是谁
excel表格中排序中主要关键 次要关键字 第三
猪肉550g!14.5元一盒,问多少一公斤?
六括号二括号里可以填多少是三的倍数
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?