7-3 选择法排序 (15分)

本题要求将给定的n个整数从大到小排序后输出。

输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:
4
5 1 7 6
输出样例:
7 6 5 1`

#include<stdio.h>
int main()
{
    int n,i,a[10];
    scanf("%d\n",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
   
    for(int x=1;x<=n-1;x++)
	{
		int temp;
	    for(i=x;i<=n-1;i++)
	    {
	    	if(a[i]>a[x-1])
	    	{
	    		temp = a[x-1];
	    		a[x-1] = a[i];
	    		a[i] = temp;
	    	
			}
		}
	}
	
 
    printf("%d", a[0]);
	for(i=1; i<n; i++)
		printf(" %d", a[i]);
    return 0;


}
### 回答1: 选择法排序是一种简单直观的排序方法,其过程如下: 1. 在待排序的序列中,找到最小的元素,将其放在序列的起始位置。 2. 在剩余的元素中,再次找到最小的元素,将其放在已排序序列的末尾。 3. 重复以上步骤,直到所有元素都被排序。 选择法排序的时间复杂度为O(n^2),不适用于大规模数据的排序。但是,它的实现简单,代码量少,适用于小规模数据的排序。 ### 回答2: 7-9选择法排序是一种简单但效率较低的排序算法,主要思想是每次遍历数组找到最小的元素,然后将其放到数组的第一个位置,接着在剩余的元素中继续遍历,找到次小的元素放到数组的第二个位置,以此类推,直到整个数组有序。 具体的排序过程如下: 1. 遍历数组,找到最小的元素,并将其与数组的第一个元素交换位置。 2. 继续遍历剩余的元素,找到次小的元素,并将其与数组的第二个元素交换位置。 3. 以此类推,每次遍历时找到当前未排序中的最小元素,并将其放到已排序部的末尾。 4. 当整个数组被排序完成时,算法结束。 需要注意的是,在每一次循环中都需要遍历整个数组,这样会导致时间复杂度较高,尤其是对于大规模数据排序时,效率较慢。因此,在实际应用中,7-9选择法排序不常被使用,而更常见的排序算法是快速排序、归并排序等。 ### 回答3: 7-9 选择法排序,其实就是每一轮找到未排序序列中的最小元素,然后将它放到已排序序列的末尾。具体步骤如下: 1. 设置数组a,序列长度为n。 2. 从0到n-1遍历序列,每次选取未排序序列中最小的元素min,记录它的下标。 3. 将min元素与未排序序列的第一个元素a[i]交换位置,即将min放在已排序序列的末尾。 4. 重复步骤2-3,直到所有元素都被排序。 举一个简单的例子,假设有以下待排序的序列:[5, 1, 9, 3, 7],使用选择法排序的过程如下: 第一轮:找到最小元素1,与第一个元素5交换位置,序列变为[1, 5, 9, 3, 7]。 第二轮:从下标1到下标4中找到最小元素3,与第二个元素5交换位置,序列变为[1, 3, 9, 5, 7]。 第三轮:从下标2到下标4中找到最小元素5,与第三个元素9交换位置,序列变为[1, 3, 5, 9, 7]。 第四轮:从下标3到下标4中找到最小元素7,与第四个元素9交换位置,序列变为[1, 3, 5, 7, 9]。 第五轮:序列已全部排序,结束排序过程。 可以看到,选择法排序是一种简单直观的排序方法,但是因为每一轮只能确定一个元素的位置,所以它的时间复杂度较高,最坏情况下需要比较n(n-1)/2次。但是对于小规模的序列,选择法排序还是可以有效地排序的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值