选择排序初识,改进?

        选择排序改进了冒泡排序,将其交换次数从O(N 2) 减少到了O(N),但是比较的次数仍然为O(N2),即使这样,选择排序依然为大数据量的排序提出了一个非常重要的改进,减少了大量数据在内存中的交换次数。

          talk is cheap ,show my code!
           

package javal.util.test;

public class SelectSort {
	public static void main(String[] args) {
		long[] array = new long[] {45,2,344,55,66,1,2234,54,6};
		selectionSort(array);
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
	}
	
	public static void selectionSort(long[] array) {
		int out,in,min,len=array.length;
		
		for(out =0; out < len-1 ; out++) {
			min = out;
			for(in= out+1; in<len; in++) {
				if(array[in] < array[min]) {
					min = in;
				}
			}
			long temp =array[out];
			array[out] = array[min];
			array[min] = temp;
		}
	}
}

        选择排序几个注意点:

        1.   外层for循环, 从数组的开始位置(第0位)开始,(即 比较当前位置的数据项与剩余数据项中最小值的大小)。到数组的最后一位(length-1)结束,每次循环起始位置向右移动一位。 每执行一次外循环,内循环的其实位置向右移动一位,这样下次循环就不会在处理小于out 的数据项,
        2.   内层for循环 , 起始位置为外层for循环的起始位加1,因为要找出剩余数据项中最小的值来做比较。到length-1结束循环,程序中 因为length-1执行过一次,所以内层for循环的结束位为length.  内层for循环的目的就是找出 剩余数据项中的最小值。 

        3. 每经过一次内循环,都会找到一个剩余数据项中的最小值,然后和out位置的最小值 做比较,如果 小于out位置的数据项,则交换两个数据项的位置。

        选择排序程序中的不变性为    下标小于out的数据项是有序的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值