数据排序——选择排序

数据排序——选择排序

1.选择排序

基本思想:

每一趟从待排序的数据元素中挑选出最小(或者最大)的一个元素,顺序放在待排序数列的最前,直到全部待排序的数据元素排完。

排序过程:

初始排序结果 [49 38 65 97 76 13 27 49]
第一趟排序后 13 [38 65 97 76 49 27 49]
第二趟排序后 13 27 [65 97 76 49 38 49]
第三趟排序后 13 27 38 [97 76 49 65 49]
第四趟排序后 13 27 38 49 [76 97 65 49]
第五趟排序后 13 27 38 49 49 [97 65 76]
第六趟排序后 13 27 38 49 49 65 [97 76]
第七趟排序后 13 27 38 49 49 65 76 [97]
最后排序结果 13 27 38 49 49 65 76 97[]

2.例题

【题目描述】:
输入 n 个数,将 n 个数按从小到大的顺序输出 (n<=10000)
输入样例:
8
49 38 65 97 76 13 27 49
输出样例:
13 27 38 49 49 65 76 97

【归纳上述排序过程,具体实现步骤如下】:
①读入数据存放在 a 数组中。
②在 a[1]~a[n] 中选择值最小的元素,与第 1 位置元素交换,则把最小值元素放入 a[1] 中。
③在 a[2]~a[n] 中选择值最小的元素,与第 2 位置元素交换,则把最小值元素放入 a[2] 中,……
④直到第 n-1 个元素与第 n 个元素比较排序为止。
程序实现方法:用两层循环完成算法,外层循环 i 控制当前序列最小值存放的数组位置,内层循环 j 控制从 i+1n 序列中选择最小的元素所在位置 k

【c++程序如下】:

#include<bits/stdc++.h>
using namespace std;
int a[10005];
int n,k,temp; 
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>a[i];
	}
    for(int i=1;i<=n;i++){
    	k=i; //当前最小元素的位置,每次从i开始 
    	for(int j=i+1;j<=n;j++){
    		if(a[j]<a[k]) k=j; //更新位置 
		}
		if(k!=i){ //如果k值有变化,则交换 
			temp=a[k];
			a[k]=a[i];
			a[i]=temp;
		}
	}
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
    return 0;
}

个人学习分享,欢迎指正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值