排序算法——选择排序

301 阅读1分钟

1.算法思想

选择排序和冒泡排序一样,两者都是运用蛮力法解决问题的排序算法。

选择排序的基本思想是:第 i 趟排序在无序序列 r_{i} ~ r_{n} 中找到值最小的记录,并和第 i 个记录交换位置作为有序序列的第 i 个记录

2.具体过程

  1. 将整个待排序序列分为有序区和无序区,初始时有序区为空,无序区包括待排序序列的所有记录。
  2. 在无序区查找值最小的记录,将它与无序区的第一个记录交换,使得有序区扩展一个记录,无序区减少一个记录。
  3. 不断重复步骤2,直到无序区只剩下一个记录为止。

3.动画演示

假设我们需要把记录按从小到大排序。蓝色表示无序区,红色表示有序区,minIndex 表示最小值的下标,下面的动画表示第一趟排序的过程

第一趟动画演示

4.代码实现

Java版:

public class SelectSort {

    public static void sort(int[] array) {
        int length = array.length - 1, index, temp;
        for (int i = 0; i < length; i++) { //对n个记录进行n-1趟排序
            index = i;
            //在无序区中查找最小值
            for (int j = i + 1; j < length; j++) {
                if (array[j] < array[index]) {
                    index = j;
                }
            }
            //如果最小值记录的下标不是当前下标,则交换记录
            if (index != i) {
                temp = array[i];
                array[i] = array[index];
                array[index] = temp;
            }
        }
    }
}

5. 其他排序