美文网首页
排序算法——选择排序

排序算法——选择排序

作者: likly | 来源:发表于2017-09-19 12:28 被阅读0次

一、算法思想

1. 算法描述

  1. 从第2个元素开始(第1个元素就是已排好序的),从已排好序的后面开始,依次与该元素比较
  2. 如果元素比该元素大,则向后顺移一位,否则继续向前比较
  3. 如果元素比该元素小,或者已到最前面,即该元素最小,则插入该元素到当前位置
  4. 重复1~3步骤,直至所有元素都排序完成

2. 伪代码

INSERTION-SORT(A){
    for i = 2 to A.length{
        key = A[i]
        // 把 key 插入到已排好序的序列 A[1..i-1] 中
        j = i-1
        while j > 0 and A[j] > key{
            //大于key的元素都向后移动
            A[j+1] = A[j]
            j = j -1
        }
        //插入元素 key
        A[j+1] = key
    }
}

3. 算法流程

插入排序流程插入排序流程

二、算法实现

1. kotlin

/**
 * 插入排序
 * 1. 从第2个元素开始(第1个元素就是已排好序的),从已排好序的后面开始,依次与该元素比较
 * 2. 如果元素比该元素大,则向后顺移一位,否则继续向前比较
 * 3. 如果元素比该元素小,或者已到最前面,即该元素最小,则插入该元素到当前位置
 * 4. 重复1~3步骤,直至所有元素都排序完成
 * @author likly
 * @version 1.0
 */

/**
 * 插入排序
 * @param array 要排序的数组
 * @param debug 是否输入每次排序后的结果
 */
fun insertSort(array: Array<Int>, debug: Boolean = false) {
    //从第2个元素(下标为1)起,依次遍历
    for (i in 1 until array.size) {
        //记录当前元素为 key
        val key = array[i]
        //从已排好序的最后开始
        var j = i - 1
        //如果未遍历完,并且当前位置的值大于key元素的值,那么该元素向后位移一位
        while (j >= 0 && array[j] > key) {
            array[j + 1] = array[j]
            j--
        }
        //把key元素插入到当前位置
        array[j + 1] = key
        if(debug){
            printlnArray("第${i}次排序:",array)
        }
    }
}

fun main(args: Array<String>) {
    val array = arrayOf(5, 2, 4, 6, 1, 3)
    printlnArray("排序前:", array)
    insertSort(array,true)
    printlnArray("排序后:", array)
}

运行结果:

排序前:5 2 4 6 1 3 
第1次排序:2 5 4 6 1 3 
第2次排序:2 4 5 6 1 3 
第3次排序:2 4 5 6 1 3 
第4次排序:1 2 4 5 6 3 
第5次排序:1 2 3 4 5 6 
排序后:1 2 3 4 5 6 

相关文章

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 算法4:插入排序和选择排序算法的比较

    排序算法列表电梯: 选择排序算法:详见 《算法4》2.1 - 选择排序算法(Selection Sort), Py...

  • 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

    图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

  • PHP常用算法

    基于选择的排序算法 常见的基于选择的排序算法有:冒泡排序、插入排序、选择排序、归并排序和快速排序,我们在选在排序算...

  • 算法and数据结构

    算法 冒泡排序 选择排序 计数排序

  • 基础排序算法总结

    排序算法分为内部排序和外部排序,而我们经常说的基础排序算法,都是内部排序算法。包括冒泡排序,选择排序,插入排序,快...

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • 《算法4》2.1 - 插入排序算法(Insertion Sort

    排序算法列表电梯: **选择排序算法:详见 Selection Sort ** 插入排序算法(Insertion ...

  • 排序算法

    排序算法 排序是最基本的算法之一,常见的排序算法有插入排序、希尔排序、选择排序、冒泡排序、堆排序、归并排序及快速排...

  • 面试算法知识梳理(12) - 二叉树算法第二部分

    面试算法代码知识梳理系列 面试算法知识梳理(1) - 排序算法 插入排序 希尔排序 选择排序 冒泡排序 计数排序 ...

网友评论

      本文标题:排序算法——选择排序

      本文链接:https://www.haomeiwen.com/subject/lnewsxtx.html