常用算法之选择排序
基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
选择排序的基本考虑:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。先临时记录其位置,只有在一趟
循环完以后确定了最小的数据,才会发生交换。
逐步选取n-1到1(Java里面数组以0开始标记),分别作为第n,n-1,...,2层顶,第2层顶筑好了之后,只剩下一个比它小的元素,排序结束。
每个顶的筑成算法如下:用maxIndex变量记录最大元素的位置,初始化为顶所在的位置(默认顶最大),从顶的前面一位到位置0,依次和当前的最大元素比较,
如果比当前的最大元素大,maxIndex更新为新的位置,循环结束已经知道最大元素的位置maxIndex,如果最大元素不是顶,那么交换最大元素和顶。选择排序的Java实现以及测试代码如下:
写法一:
private static void SelectSort(int[] array) {
if (array == null && array.length < 2) {
return;
}
int size = array.length;
for (int i = size - 1; i > 0; i--) {
int maxIndex = i;
for (int j = i - 1; j > 0; j--) {
if (array[j] > array[maxIndex]) {
maxIndex = j;
}
}
if (maxIndex != i)
exchangeElements(array, i, maxIndex);
}
}
// 选择排序
public static void exchangeElements(int[] array, int index1, int index2) {
int temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
public static void printArray(int[] array) {
System.out.print("{");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
if (i < array.length - 1) {
System.out.print(", ");
}
}
System.out.println("}");
}
写法二:
public static void selectSort(int[] number) {
if (number == null && number.length < 2)
return;
int size = number.length;// 数组长度
int temp = 0;// 临时值
for (int i = 0; i < size; i++) {
int j = i;// 待确定位置
for (int k = size - 1; k > i; k--) {// 选择第i个位置
if (number[k] < number[j]) {
j = k;
}
}
// exchange
temp = number[i];
number[i] = number[j];
number[j] = temp;
}
}
public static void main(String[] args) {
int array[] = { 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5 };
System.out.println("选择排序前:");
printArray(array);
// SelectSort(array);
selectSort(array);
System.out.println("选择排序后:");
printArray(array);
}
结果如下:
参考链接:http://blog.csdn.net/kimylrong/article/details/17126267 ;
http://www.cnblogs.com/0201zcr/p/4764427.html