选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
/**
* 选择排序
* 选择排序(Selection sort)是一种简单直观的排序算法。
* 它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,
* 然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。
* 以此类推,直到全部待排序的数据元素的个数为零。
* 选择排序是不稳定的排序方法。
*/
public class SelectionSort {
/**
* 算法描述:
* n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
* 1.初始状态:无序区为R[1..n],有序区为空。
* 2.第1趟排序在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,
* 使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
* 3.第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。
* 该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,
* 使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
* 4.n-1趟结束,数组有序化了。
* @param args
*/
public static void main(String args[]) {
int[] arr = {11, 6, 2, 7, 23,7, 8, 3, 9, 12, 0};
int length = arr.length;
int minIndex,tmp;
for(int i=0;i<length-1;i++){//n-1趟
minIndex = i;
for(int j=i+1;j<length;j++){//在无序区R[1..n]中选出关键字最小的记录
if(arr[j]<arr[minIndex]){
minIndex = j;
}
}
//将它与无序区的第1个记录R交换
tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
if(minIndex != i){
//将它与无序区的第1个记录R交换
tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
}
输出结果:
0,2,3,6,7,7,8,9,11,12,23,