算法基础:排序算法之选择排序
实现:数列有序排序
思想:预设一个变量min,并赋值一个初始值 (选择已知数列中的任意一个数值) ,然后通过循环遍历数列,逐个与min做比较,如果比min小,则互换( 位置互换 ),否则就不做操作,以此类推,得出一个有序的排序数列。
工作原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
下面以这么一个数列{50.36, 464654, 52, 556.12, 96.5, 5451.3, 554, 82, 67.7},实现对它的顺序排序
50.36 | 464654.0 | 52.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 |
Java版实现:
public class NumSort {
public static void main(String[] args) {
double nums[] = {50.36, 464654, 52, 556.12, 96.5, 5451.3, 554, 82, 67.7};
System.out.println("未排序前的数列:");
for (int i = 0; i < nums.length; i++)
System.out.print(nums[i] + "\t");
double[] sorts = NumSort.selectionSort(nums);
System.out.println("\n排序后的数列:");
for (int i = 0; i < sorts.length; i++)
System.out.print(sorts[i] + "\t");
}
// 选择排序(Selection Sort)
public static double[] selectionSort(double[] nums) {
int length = nums.length;
int minIndex;
double tmp;
for (int i = 0; i < length - 1; i++) {
minIndex = i;
for (int j = i + 1; j < length; j++) {//后面n位数字与minIndex索引位置数字做比较
if (nums[j] < nums[minIndex]) { //找到最小的数
minIndex = j;//保存索引下标
}
}
// 置换位置,既不丢失数字又节省内存
tmp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = tmp;
}
return nums;
}
}
程序输出结果:
未排序前的数列:
50.36 464654.0 52.0 556.12 96.5 5451.3 554.0 82.0 67.7
排序后数列:
50.36 52.0 67.7 82.0 96.5 554.0 556.12 5451.3 464654.0
50.36 | 464654.0 | 52.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 | |
次序 | ↓↓↓程序执行推演过程 | ||||||||
1 | 50.36 | 464654.0 | 52.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 |
2 | 50.36 | 52.0 | 464654.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 |
3 | 50.36 | 52.0 | 67.7 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 464654.0 |
4 | 50.36 | 52.0 | 67.7 | 82.0 | 96.5 | 5451.3 | 554.0 | 556.12 | 464654.0 |
5 | 50.36 | 52.0 | 67.7 | 82.0 | 96.5 | 5451.3 | 554.0 | 556.12 | 464654.0 |
6 | 50.36 | 52.0 | 67.7 | 82.0 | 96.5 | 554.0 | 5451.3 | 556.12 | 464654.0 |
7 | 50.36 | 52.0 | 67.7 | 82.0 | 96.5 | 554.0 | 556.12 | 5451.3 | 464654.0 |
8 | 50.36 | 52.0 | 67.7 | 82.0 | 96.5 | 554.0 | 556.12 | 5451.3 | 464654.0 |