选择排序初识,改进?

版权声明:本文为博主原创文章,未经博主允许不得转载,转载请标明原文出处。 https://blog.csdn.net/qq_31408331/article/details/79968685

        选择排序改进了冒泡排序,将其交换次数从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的数据项是有序的。

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页