C++ 选择排序(数据结构)

51 篇文章 29 订阅
47 篇文章 2 订阅

“选择排序法” 基本原理 

        将要排序的对象中每次选择一个值,按照非递减(从小到大)(或非递增(从大到小))顺序进行排列,每经过一次排序,要排序对象便会分为一个待排序部分和已排序部分。之后,进行相同的过程,直至顺序排列完成。

        如下所示:

        排序前:70 80 31 37 10 1 48 60 33 80

第1步:[1] 80 31 37 10 70 48 60 33 80  最小值1

第2步:[1 10] 31 37 80 70 48 60 33 80  最小值10

第3步:[1 10 31] 37 80 70 48 60 33 80  最小值31

第4步:[1 10 31 33] 80 70 48 60 37 80  最小值33

第5步:[1 10 31 33 37] 70 48 60 80 80  最小值37

第6步:[1 10 31 33 37 48] 70 60 80 80  最小值48

第7步:[1 10 31 33 37 48 60] 70 80 80  最小值60

第8步:[1 10 31 33 37 48 60 70] 80 80  最小值70

第9步:[1 10 31 33 37 48 60 70 80] 80  最小值80

        最后一个值为80,无法再进行,排序完成。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
#define SWAP(x,y) {int t; t = x; x = y; y = t;}//借助宏定义实现元素交换,可以修改为函数
#include<iostream>
using namespace std;

void selsort(int number[]){ 
	int i, j, k, m;
	for(i = 0; i < MAX-1; i++){
		m = i;
		for(j = i+1; j < MAX; j++){
			if(number[j] < number[m]){
				m = j;
			}
		}
		if( i != m){
            //此处可以将SWAP宏定义中的交换修改为元素在内部交换
			SWAP(number[i], number[m]);
		}
		cout<<"第 "<<i+1<<" 次排序:"; 
		for(k = 0; k < MAX; k++){
			cout<<number[k]<<' ';
		}
		cout<<endl;
	}
}

int main(){
	int number[MAX] = {0}; 
	int i;
	srand(time(NULL)); //刷新每次产生的随机数,若无此句,每次随机数相同,亲自尝试一下便知
	cout<<"\n选择排序:\n\n";
	cout<<"排序前:";
	for(i = 0; i < MAX; i++){ 
		number[i] = rand() % 100; //产生0-99的随机数,这里没有采用固定的数组值进行排序,随机生成
		cout<<number[i]<<' ';
	}
	cout<<endl<<endl;
	selsort(number);
	return 0;
}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等日出看彩虹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值