[算法] 选择排序和插入排序

两种排序是最常见的简单排序算法。

选择排序

其特点有:

  • 运行时间和输入无关
  • 数据移动最少

关键代码:

public static void sort(Comparable[] a)
    { // 将数组a 按照从小到大排列
	for (int i = 0, n = a.length; i < n; ++i){
	    // 首先找i到n之间的最小数
	    int min = i;
	    for (int j = i+1; j < n; ++j){
		if (less(a[j],a[min]) ){
		    // 如果遇到更小的
		    min = j;
		}
	    }
	    // 将i位置和最小数交换
	    exch(a,min,i);
	}
    }

插入排序

特点:

  • 插入排序所需时间取决于输入中元素的初始顺序
  • 对于部分有序数组,插入排序的性能很好

关键代码:

    public static void sort(Comparable[] a)
    { // 将数组a 按照从小到大排列
	int N = a.length; // 数组长度
	for (int i = 0; i < N ; ++i){
	    for (int j = i; j > 0 && less(a[j] , a[j - 1]); --j){
		// j 是从i 往 0 进行遍历
		// 如果 a[j] 比 a[j - 1] 还要小, a[j] 应该和 a[j-1] 换位置
		exch (a, j , j - 1);// 换位操作, 此处还可以提高效率
	    }
	}
    }

两种排序算法比较

打包代码地址:link

命令: java SortCompare InsertionX Selection 20000 100, 其中:

  • InsertionX 代表插入排序(优化过的版本)
  • Selection 代表选择排序
  • 20000 代表数组元素个数
  • 100 代表排序次数

运行结果:

总的来说,插入排序在性能上比选择排序好一些。

原文地址:https://www.cnblogs.com/guoyunzhe/p/6106789.html