输入一个数组,按从大到小的顺序排序(提示:可使用选择排序,冒泡排序或插入排序的任何一种)

用C语言

第1个回答  2009-05-21
用什么语言好歹说一下吧!
第2个回答  推荐于2017-11-27
选择排序:选择法排序是一种简单的容易实现的对数据排序的算法。
以整形数组元素为例,有数组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<n-1;i++)
{
k=i; //初始化为基准位置
for(j=i+1;j<n;j++)
{
if (array[j]<array[k]) k=j ; // k 始终指示出现的较小的元素的位置
{ 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<stdio.h>
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<iostream.h>
void main()
{
int a[n],i,j,temp;
cout<<"请输入数字:"<<endl;
for(i=0;i<=n;i++)
cin>>a; //依次输入n个整数
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(a<a[j]) //利用临时变量temp交换顺序
{ temp=a[j];
a[j]=a;
a=temp;
}
cout<<a<<' '; //依次输出结果
}

C语言中的排序方法选择方法是首先从要选择的数中选择最大(或最小)的数,将它放在第一个位置,然后从剩下的数中选择最大(或最小)的数放在第二个位置,直到最后从剩下的两个数中选择最大(或最小)的数放在倒数第二个位置,剩下的一个数放在最后位置,完成排序。本回答被网友采纳

python中对列表元素大小排序(冒泡排序法,选择排序法和插入排序法)—排...
该算法的核心思想是从列表中选出最小(或最大)元素,放置于已排序序列的末尾,然后对剩余元素重复此操作直到完成排序。选择排序法在实际应用中并不常用,因为它效率较低,但其代码实现简单,适合初学者学习理解。

冒泡排序、插入排序、选择排序三者的区别是什么?
一、冒泡排序,代码和运行结果如图所示。重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。二、选择排序,代码和运行结果如图所示。思想:选择排...

java怎么让数组的数字从大到小排序?
将数字从大到小排序的方法:例如简一点的冒泡排序,将第一个数字和后面的数字逐个比较大小,如果小于,则互换位置,大于则不动。此时,第一个数为数组中的最大数。然后再将第二个数与后面的数逐个比较,以次类推。示例代码如下: public class Test { public static void main(String[] args) { i...

简述数据排序的三种方式
数据排序的三种方式包括冒泡排序、选择排序和插入排序。1. 冒泡排序 冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。例如,对数列[5, 3, 8, 4, 2]进行...

输入n 个数字,按照从大到小的数字排列!
下面选择用c来写且选择排序法吧 include<stdio.h> void main(){ int i,j,min,temp,a[11];printf("enter the number\\n");for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<9;i++){min=i;for(j=1;j<10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];...

怎样用C语言对一串整行数从大到小排序
算法思想简单描述: 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上 而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较 小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要 求相反时,就将它们互换。 下面是一种改进的冒泡算法,它记录了每一遍扫描后最后下沉数的 位置k,...

常见的排序算法—选择,冒泡,插入,快速,归并
冒泡排序是一种比较基础的排序算法,其思想是相邻的元素两两比较,较大的元素放后面,较小的元素放前面,这样一次循环下来,最大元素就会归位,若数组中元素个数为n,则经过(n-1)次后,所有元素就依次从小到大排好序了。整个过程如同气泡冒起,因此被称作冒泡排序。 选择排序代码如下: public void Bubble_sort(int[] ...

c语言考试。问数组,常见的数组排序算法有那几种?选择一个描述过程。
常用冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面(数组由小到大排序)。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后,此时第一趟结束,在最后的数必...

怎么用python排序数字从小到大?
为了用Python实现数字从小到大的排序,你可以选择冒泡排序或插入排序。首先,将数字读入到列表中。可选择直接读入数字,或先平方再添加到列表内。然后,使用列表解析,将列表中的元素转换为数字的平方。设计一个排序函数,可以是冒泡排序或插入排序等。注意,作业要求使用while循环,禁止使用内置函数如len(),...

c语言,输入3个数,按从大到小的顺序输出,要用三种方法
1、#include <stdio.h>int main(){int a,b,c,t;scanf("%d %d %d",&a,&b,&c);if ( a < b ){t = a;a = b;b = t;}if( a < c ){t = a;a = c;c = t;}if( b < c ){t = b;b = c;c = t; }printf("%d %d %d",a,b,c);return 0;}2、冒泡排序#...

相似回答