常用排序算法之简单选择排序

原理:

将数据分为有序区和无序区,从无序区中选择最小(或最大)的元素与有序区中的元素进行交换,循环直到整个排序结束。

讲解:

设数组为array[0...n-1].

1. 初始时有序区为array[i=0],i = 0 ... n-2 ,设定数组最小值的小标为minIdx = i ,从j=i+1...n-1中一个个与array[i]进行比较,如果array[j] < array[i],设置minIdx = j ;

2. 如果i != minIdx ,则将array[i] 与 array[minIdx]进行交换 ;

4. i++ ,循环第1、2步,直到 i = n -1 时结束整个排序过程;

 

实例:

现有数组[6,2,4,1,9,5],要求对其进行升序排序。

1. 初始时:有序区为array[0],i = 0 , minIdx = i =0, j = i+1...n-1=1、2、3、4、5 ;

2. 元素array[j=1] < array[minIdx=0] ,设置minIdx = 1 ,j++; 

3. 元素array[j=2] > array[minIdx =1] , minIdx 不变,j++ ;

4. 元素array[j=3] < array[minIdx=1], minIdx = 3,j++ ;

5.元素array[j=4] > array[minIdx=3],minIdx不变,j++ ;

6.元素array[j=5] > array[minIdx=3],minIdx不变,j++ ;

7. j 不小于array.length-1,第一次循环结束 ,将array[i=0]与array[minIdx=3]元素进行交换,得到第一轮排序后的结果:[1,2,4,6,9,5];

8. i++,循环1-7步,直到i = n-1 = 5时结束;

程序:

/**
 * 简单选择排序
 * @param array
 */
public static void selectSort(int[] array){
	int i,j,minIdx,tmp ;
	for(i = 0;i< array.length - 1;i++){
		minIdx = i ;
		for(j = i+1;j<array.length;j++){
			if(array[j] < array[minIdx]){
				minIdx = j ;
			}
		}
		if(minIdx != i){
			tmp = array[i] ;
			array[i] = array[minIdx] ;
			array[minIdx] = tmp ;
		}
	}
}


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值