选择排序及原理
简单选择排序类似于冒泡排序(Bubble Sort) ,每次都会在剩下的元素集合中选择出一个最值出来填充到当前位置。唯一的区别是,冒泡排序在每次发现比当前值小于(或大于)时,都会交换元素的位置, 而 简单选择排序是选择剩余元素中的最值和当前位置交换数据。
比如对于元素集合R={37, 40, 38, 42, 461, 5, 7, 9, 12}
在第一趟排序中:37直接和5交换, 形成新的序列 R1={5,40,38,42,461,37,7,9,12}
在第二趟排序中:40直接和7交换, 形成新的序列 R2={5,7,38,42,461,37,40,9,12}
以此类推,直到最后一个元素(注意:在第二趟排序中,38比42小,但是他们并没有交换数据)。
package ch02;
/**
* 选择排序
* @author 小明
*
*/
public class SelectionSort {
public static void sort(long [] arr){
int k = 0;
long tmp = 0;
for(int i =0;i<arr.length;i++){
k =i;
for(int j =i;j<arr.length;j++){
if(arr[j]<arr[k]){
k=j;//每次k为最小值
}
}
tmp =arr[i];
arr[i]=arr[k];
arr[k] =tmp;
}
}
}
package ch02;
public class TestSort {
public static void main(String[] args) {
long[]arr = new long[]{20,4,5,6,3,7,1};
// BubbleSort bubbleSort = new BubbleSort();
// bubbleSort.sort(arr);
SelectionSort selectionSort = new SelectionSort();
selectionSort.sort(arr);
for (int s = 0; s < arr.length; s++) {
System.out.println(arr[s]);
}
}
}