[golang] 数据结构-直接插入排序

原理
直接插入排序,也是一种非常简单的排序算法。
第一轮先从第二个元素开始,和第一个比较,如果较小就交换位置,本轮结束。第二轮从第三个元素开始,先与第二个比较,如果较小就与第二个交换,交换后再于第一个比较。如此循环直至最后一个元素完成比较逻辑。

复杂度
最好的情况下,直接插入排序只需进行n-1次比较,0次的交换。平均下来时间复杂度为 O(n^2)。
由于是每个元素逐个与有序的队列进行比较,所以不会出现相同数值的元素在排序完成后交换位置。所以直接插入排序是种稳定的排序算法。

代码

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    var length = 10
    var tree []int

    for i := 0; i < length; i++ {
        tree = append(tree, int(rand.Intn(1000)))
    }
    fmt.Println(tree)

    for i := 1; i < length; i++ {
        for j := i; j > 0 && tree[j] < tree[j-1]; j-- {
            tree[j], tree[j-1] = tree[j-1], tree[j]
        }
        fmt.Println(tree)
    }

}

运行结果

原文地址:http://blog.51cto.com/13022101/2148154

时间: 2024-10-14 19:28:37

[golang] 数据结构-直接插入排序的相关文章

[golang] 数据结构-二分插入排序

接上文 直接插入排序直接插入排序每轮比较中,都需要把待处理的元素与前面每一位元素进行比较.那么有没有一种方法可以优化下,减少比较次数呢?答案当然是有的,下面介绍的二分插入就是直接插入排序的优化算法之一. 原理直接插入排序是挨个的去比较,而二分插入排序则是利用二分搜索的原理,将待排序的元素与左侧已经排好序的队列的中间元素(n/2)进行比较.较小时则继续与中间元素左侧队列中间元素进行比较,较大则与中间元素右侧队列的中间元素进行比较,直至找到合适的位置,再讲这个位置后续的元素向后移动一位,带插入的元素

golang数据结构之插入排序

//InsertSort 插入排序 func InsertSort(arr *[7]int) { for i := 1; i < len(arr); i++ { insertVal := (*arr)[i] inserIndex := i - 1 for inserIndex >= 0 && (*arr)[inserIndex] > insertVal { (*arr)[inserIndex+1] = (*arr)[inserIndex] inserIndex-- } /

数据结构例程——插入排序之希尔排序

本文是[数据结构基础系列(9):排序]中第3课时[插入排序之希尔排序]的例程. 1.希尔排序 #include <stdio.h> #define MaxSize 20 typedef int KeyType; //定义关键字类型 typedef char InfoType[10]; typedef struct //记录类型 { KeyType key; //关键字项 InfoType data; //其他数据项,类型为InfoType } RecType; //排序的记录类型定义 void

数据结构之——插入排序

1.排序中一些概念 (1)算法稳定性:如果待排序的序列中两个元素A和B,对应的关键字key_A和key_B相等,且在原序列中A在B前面.如果使用某一排序算法后,A仍在B前面,则称这个算法是稳定的,否则称该算法不稳定.值得注意的是,排序算法稳定与否并不能衡量一个算法的优劣,主要是用其来描述算法的性质. (2)在排序过程中,根据数据元素是否完全在内存中,可以及将算法分为内部排序和外部排序.如果排序期间元素全部在内存中,则称之为内部排序:若排序期间元素无法全部同时放入内存中,则将其称之为外部排序. 2

数据结构—排序-----插入排序

插入排序,就是对一个已经排序好 的数组中插入元素, 比如{2,3,1,4,5},这5个元素组成的数组,我们现在要对他们进行排序,首先,我们把{2}看成已经排序好的数组,然后,把3 这个元素插入到已经排序好的{2} 的数组中,于是就会有{2,3},然后,再把1插入到{2,3}已经排序好的数组中,这个时候,1这个元素与已经排序好的数组中的每一个元素进行对比,直到找到这个元素的位置. 后面的一次类推: 下面先把代码贴出来:(完全复制,可以运行)这里使用的是VC++6.0 编译环境,使用c语言:

c语言数据结构之 插入排序

算法:从第二个元素开始,与前一个元素进行比较,如果小于前一个元素,两者交换位置,一直循环到不再小为止 编译器:VS2013 代码 #include "stdafx.h"#include<stdlib.h> //函数声明void InsertSort(int a[],int n); //插入排序(从小到大) int main(){ int i,n,a[100]; printf("请输入需要排序元素的个数:"); scanf_s("%d"

数据结构之插入排序与希尔排序

1.直接插入排序 直接插入排序是一种最简单的排序算法,它的基本操作是将一个记录插入到已经排序好的序列中,从而得到一个新的有序表.直接插入排序算法原理如下图所示: 直接插入排序算法如下: void InsertSort(int arr[],int length) { int key,j; for(int i=1;i<length;++i) { key=arr[i]; //记录标志; j=i-1; //循环比较并且交换相邻的两个数; while (j>=0&&arr[j]>k

数据结构之插入排序--折半插入排序

排序思路:通过折半查找的方式找到合适的插入位置再插入. 算法实现: public class BiInsertSort { public static void biInsertSort(int arr[]){ for(int i = 1; i < arr.length; i ++){ int temp = arr[i]; int left = 0; int right = i-1; while(left <= right){//通过拆装查找找到插入位置 int mid = (left+rig

数据结构之插入排序--直接插入排序

排序思路:每次将一个待排序的元素与已排序的元素进行逐一比较,直到找到合适的位置按大小插入. 第一趟比较示图: 算法实现: public static void insertsort(int arr[]){ for(int i = 1;i < arr.length; i ++){ if(arr[i] < arr[i-1]){//注意[0,i-1]都是有序的.如果待插入元素比arr[i-1]还大则无需再与[i-1]前面的元素进行比较了,反之则进入if语句 int temp = arr[i]; in