小橙书阅读指南——选择排序

Posted learnhow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小橙书阅读指南——选择排序相关的知识,希望对你有一定的参考价值。

算法描述:一种最简单的排序算法是这样的:首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置。再次,再剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,知道将整个数组排序。这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小者。

算法图示:

技术分享图片

 Java代码示例:

import common.ArraysGenerator;
import common.Sortable;

import java.io.IOException;
import java.util.Arrays;

public class Selection implements Sortable<Integer> {

    @Override
    public void sort(Integer[] array) {
        for (int i = 0; i < array.length; ++i) {
            int minIndex = i;
            for (int j = i + i; j < array.length; ++j) {
                if (array[j] < array[minIndex]) {
                    minIndex = j;
                }
            }
            int tmp = array[minIndex];
            array[minIndex] = array[i];
            array[i] = tmp;
        }
    }

    public static void main(String arg[]) throws IOException {
        Integer[] arr = ArraysGenerator.fromFile("disorder.txt", 1000000);

        Selection selection = new Selection();
        long start = System.currentTimeMillis();
        selection.sort(arr);
        long end = System.currentTimeMillis();


        System.out.println(Arrays.toString(arr));
        System.out.println(end - start);
    }
}

Qt/C++代码示例:

void Selection::sort(int * arr, int len)
{
    for (int i = 0; i < len; ++i) {
        int minIndex = i;
        for (int j = i + 1; j < len; ++j) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        int tmp = arr[minIndex];
        arr[minIndex] = arr[i];
        arr[i] = tmp;
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 从文件中读取数组的方法,指定文件名与数组长度,返回数组指针
    int *arr = Arrays::fromFile("disorder.txt", 1000000);

    Selection selection;

    QTime rt;
    
    rt.start();
    selection.sort(arr, 1000000);
    int el = rt.elapsed();

    qDebug() << el;
    return a.exec();
}

总的来说,选择排序是一种很容易理解和实现的简单排序算法,它有两个很明显的特点——运行时间和输入无关。

以上是关于小橙书阅读指南——选择排序的主要内容,如果未能解决你的问题,请参考以下文章

小橙书阅读指南——插入排序

小橙书阅读指南——归并排序的两种实现

小橙书阅读指南——希尔排序及改进算法

小橙书阅读指南——优先队列和索引优先队列

小橙书阅读指南——散列表

小橙书阅读指南——无向图深度优先搜索和路径查找算法