编一程序用简单选择排序方法对n个整数排序(从大到小)。 对n个数进行降序排列,简单选择排序的算法思

编一程序用简单选择排序方法对n个整数排序(从大到小)。
对n个数进行降序排列,简单选择排序的算法思想如下:
1)首先通过n-1次比较,从n个元素中找出值最大的元素,将它与第一个元素交换。(第一趟排序)。
2)再通过n-2次比较,从剩余的n-1个元素中找出值次大的元素,将它与第二个元素交换。(第二趟排序)。
3)重复上述操作,共进行n-1趟排序后,排序结束。
输入
先输入整数个数n(n<=100000)
然后输入n个整数
输出
输出排序后的n个整数,整数之间由1个空格隔开。
我的答案:
#include <stdio.h>
int main()
{
int a[100000],t;
int i,j,n;
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
{
if (a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for (i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
运行时间太长,如何优化???

#include<stdio.h>

int main()

{int i,j,t,n,a[100];

printf("请输入有几个整数(<=100):du");

scanf("%d",&n);

printf("请输入这%d个整数:zhi\n");

for(i=0;i<n;i++)

scanf("%d",&a[i]);

for(i=0;i<n-1;i++)

{k=i;

for(j=i+1;j<n;j++)

if(a[j]<a[k])

k=j;

t=a[i];a[i]=a[k];a[k]=t;

}

printf("排序以后的数:\n");

for(i=0;i<n;i++)

printf("%d ",a[i]);

printf("\n");

return 0;

}

扩展资料:

在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。

最坏情况下,即待排序记录初始状态是按第一条记录最小,之后的记录从小到大顺序排列,则需要移动记录的次数最多为3(n-1)。

简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n^2),进行移动操作的时间复杂度为O(n)。

参考资料来源:百度百科-简单选择排序

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-21

程序如下:

#include<stdio.h>

void fuc(int a[],int n)

{

    int i,max,m,k,t,j;

    m=n; 

    for(k=0;n>0;n--,k++)

    {   

    for(max=a[k],i=m;i>=k;i--)

        {

        if(a[i]>=max) 

        {

        max=a[i];

        t=i;

    }

    }

    j=a[k];

    a[k]=max;

a[t]=j;

}

for(i=0;i<=m;i++)

{

    printf("%d",a[i]);

    if(i!=m) printf(" ");

}

}

int main()

{

int i,a[100000],n;

scanf("%d",&n);

for(i=0;i<n;i++)

    scanf("%d",&a[i]);

    i--;

fuc(a,i);

return 0;

}

扩展资料:

计算机程序,港、台译做电脑程式。计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。

它以某些程序设计语言编写,运行于某种目标结构体系上。打个比方,程序就如同以英语(程序设计语言)写作的文章,要让一个懂得英语的人(编译器)同时也会阅读这篇文章的人(结构体系)来阅读、理解、标记这篇文章。

一般的,以英语文本为基础的计算机程序要经过编译、链接而成为人难以解读,但可轻易被计算机所解读的数字格式,然后放入运行。

程序是一个指令序列。

本回答被网友采纳