zoukankan      html  css  js  c++  java
  • [算法] 选择排序和插入排序

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

    选择排序

    其特点有:

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

    关键代码:

    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 代表排序次数

    运行结果:

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

  • 相关阅读:
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    C语言博客作业05--指针
    C语言博客作业04--数组
    DS博客作业08--课程总结
    DS博客作业07--查找
    06--图
    博客作业05--树
    DS博客作业01--日期抽象数据类型设计与实现
  • 原文地址:https://www.cnblogs.com/guoyunzhe/p/6106789.html
Copyright © 2011-2022 走看看