直接插入排序(Selection Sort)算法
1.基本思想:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
个数增加1个的新有序区和记录个数减少1个的新无序区。
序区。
基本方法
1. 算法完成需要 n - 1 趟排序,按照算法的描述,n - 1 趟排序之后数组中的前 n - 1 个元素已经处于相应的位置,第 n 个元素也处于相应的位置上。
2. 第 i 趟排序,实际上就是需要将数组中第 i 个元素放置到数组的合适位置,这里需要一个临时变量 j 来遍历序列中未
排好序的那些元素,另一临时变量 d 来记录未排好序的那些元素中值最小的元素的下标值,
3. 一趟遍历开始时,令 d = i,假定未排序序列的第一个元素就是最小的元素,遍历完成后,变量 d 所对应的值就是值
最小的元素,判断 d 是否是未排序序列的第一个元素,如果是,则不需要交换元素,如果不是,则需要交换array[d] 和
array[i]。
4. 此方法是不稳定排序算法,可对数组{a1 = 49,a2 = 38, a3 = 65, a4 = 49, a5 = 12, a6 = 42} 排序就可以看出,排序
完成后 a1 和 a4的相对位置改变了。
5. 此方法移动元素的次数比较少,但是不管序列中元素初始排列状态如何,第 i 趟排序都需要进行 n - i 次元素之间的
比较,因此总的比较次数为1 + 2 + 3 + 4 +5 + . . . + n - 1 = n(n-1)/2, 时间复杂度是 O(n^2).
3.模拟动画
http://v.youku.com/v_show/id_XMjU4NTY5NTcy.html
4.Java 代码:
// 简单选择排序算法
public static void selectSort(int a[]) {
for (int i = 0; i < a.length; i++) {
int min = a[i];
int n = i;// 最小数的索引
for (int j = i + 1; j < a.length; j++) {
if (a[j] < min) {// 找出最小的数
min = a[j];
n = j;
}
}
a[n] = a[i];
a[i] = min;
}
}