java排序2(选择排序)

 

package hello;

import java.util.Random;

/**
 * 书接上回--冒泡排序
 * 
 * 选择排序: 它改进了冒泡排序,将必要的交换次数O(N*N)减少到了O(N). 但,比较次数仍然保持为O(N*N).
 * 然而,选择排序仍然为大记录量的排序提出了一个比较重要的改进, 因为,这些大量的记录需要在内存中移动,这就使交换时间和比较时间 相比起来,交换时间更为重要.
 * (一般来说,在java语言中不是这种情况,java中只是改变了引用位置, 而实际对象的位置并没有发生改变.)
 */
public class ChooseSortApp {
	public static void main(String[] args) {
		long ls = System.currentTimeMillis();
		int maxSize = 100;
		SelectionSort arr;
		arr = new SelectionSort(maxSize);
		Random r = new Random();
		// insert 10 items
		for (int i = 0; i < 10; i++) {
			arr.insert(r.nextInt(100));
		}
		arr.display();
		arr.selectionSort();
		arr.display();
		
		System.out.println(System.currentTimeMillis()-ls);
	}
}

class SelectionSort extends BubbleSort {
	public SelectionSort(int max) {
		super(max);
	}

	/*
	 * 外层循环用循环变量out,从数组开头开始(数组下标为0)向高位增长. 内层循环用循环变量in,从out所指位置开始,同样是向右移位.
	 * 在每一个in的新位置,数据项a[in]和a[min]进行比较. 如果a[in]更小,则min被赋值为in的值.
	 * 在内层循环的最后,min指向最小的数据项,然后交换out和min指向的数组数据项
	 */
	public void selectionSort() {
		int out, in, min;
		for (out = 0; out < nElems - 1; out++) {
			min = out;
			for (in = out + 1; in < nElems; in++) {
				if (a[in] < a[min])
					min = in;
			}
			swap(out, min);
		}
	}
}

你可能感兴趣的:(java,排序)