算法学习之选择排序

一、总体思路

分成两个区域:排好序区(数组前面部分,绿色部分) + 待排序区(数组后面部分,黑色部分)。

不断从后面未排序区中选最小的出来放到排序区,使得已排序区不断扩大。 --- 插入排序是遍历已排序区,选择排序是遍历未排序区。

ABCDEFGH

 

 

初始时刻:已排序区为空。

每趟:从头到尾遍历未排序区,从中选出一个最小值出来,放入已排序去区。已排序区增加一个,未排序区减少一个,未排序区起始下标加1。

 

二、优化

    不用每次都记录未排序区最小值,只需记录其下标即可。

 

三、代码

// 选择排序
void SelectSort(int arrayData[], int arraySize)
{
	int i, j;

	for (i = 0; i < arraySize - 1; i++) {
		int minIdx = i;  // 已排序区待扩充的位置,也是未排序区第一个元素

		for (j = i + 1; j < arraySize; j++) {
			if (arrayData[j] < arrayData[minIdx]) {
				minIdx = j;  // 记录当前选出来的最小值的下标
			}
		}

		if (minIdx != i) {
            int tempValue = arrayData[i];
			arrayData[i] = arrayData[minIdx];
			arrayData[minIdx] = tempValue;			
		}
	}
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值