关闭

排序——插入排序

344人阅读 评论(0) 收藏 举报
分类:

一、定义:

        插入排序分为两种:直接插入排序折半插入排序

基本的思路:

        每次将一个待排序的数据,按照其大小插入到已排序好的序列中的适当位置,知道全部数据插入完成为止。


二、步骤:

        假设待排序的数据都存在a[0...n-1]中,排序步骤:

        1.设a[0]是长度为1的有序序列,而a[1...n-1]为长度n-1的无序序列,设一个参数i=1;

        2.将a[i]与a[0...i-1]序列中的数据进行一次比较,插入到其中的适当位置(据升序降序而定),插入后形成a[0...i]的有序序列;

        3.i = i+1,重复步骤2,直到i = n-1,排序完成。

        

三、C语言实现:

        /// <summary>
        /// 插入排序
        /// </summary>
        /// <param name="unsorted"></param>
        static void insertion_sort(int[] unsorted)
        {
            for (int i = 1; i < unsorted.Length; i++)
            {
                if (unsorted[i - 1] > unsorted[i])
                {
                    int temp = unsorted[i];
                    int j = i;
                    while (j > 0 && unsorted[j - 1] > temp)
                    {
                        unsorted[j] = unsorted[j - 1];
                        j--;
                    }
                    unsorted[j] = temp;
                }
            }
        }
        当然还可以进行简化,借助换位函数封装代码:

void Insertsort(int a[], int n)  
{  
    int i, j;  
    for (i = 1; i < n; i++)  
        for (j = i - 1; j >= 0 && a[j] > a[j + 1]; j--)  
            Swap(a[j], a[j + 1]);  //换位函数
}  

四、总结:

        假如数组已经使有序的,那么每次插入一个数据只需考虑该数据最终位置之前的数据,那么插入的时间复杂度是O(N),但是一般都是对无序的数据进行排序,即最坏的情况时间复杂度为O(N^2)。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

插入排序——折半插入排序

折半插入排序是直接插入排序的一种优化,他利用了直接插入排序中前面的元素已经完成排序的特点进行折中对比。他的效果与直接插入排序一样,但是速度更快。     package com.h3c.paixu;...
  • h3c4lenovo
  • h3c4lenovo
  • 2013-02-15 15:58
  • 1497

4.插入排序——表插入排序

本文针对表插入排序。 这种排序方法采用链表的数据结构,按顺序放入数据,并按插入排序的原理修改next指针,这样能够做到排序时不移动数据。 排序完之后可以按next指向打印数据,也可以移动数据然后按数组...
  • zhengzhon
  • zhengzhon
  • 2014-02-28 19:24
  • 4724

冒泡排序,选择排序,插入排序的区别

#include int swap(int *a,int *b) { int t=*a; *a=*b; *b=t; } /* 冒泡排序的原理:每次在无序队列里将相邻两个数依...
  • wdkirchhoff
  • wdkirchhoff
  • 2014-12-07 14:02
  • 8523

插入排序——C/C++实现

它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 注意在找插入位置的时候同步进行数据的挪动。 #include #include #define s...
  • blank__box
  • blank__box
  • 2016-11-25 22:04
  • 134

算法分析之插入排序——动态数组实现

插入排序,最简单的排序算法。本次采用动态数组实现。1.申请动态数组空间 printf("输入数组的大小length:\n"); int length=0; scanf("%d",...
  • koudan567
  • koudan567
  • 2016-04-04 21:51
  • 382

【算法之家】——插入排序

【适用情况】: 有序的数据序列,要求在这个已经排好的数据序列中插入一个数,并且要求插入后数据序列依旧有序 【时间复杂度】 O(n^2) 【稳定性】 稳定的插入排序,排序后的相同的元...
  • changyinling520
  • changyinling520
  • 2016-09-04 22:53
  • 424

数据结构——直接插入排序(c++)

数据结构——直接插入排序(c++)
  • cckevincyh
  • cckevincyh
  • 2015-06-21 20:21
  • 669

数据结构与算法——插入排序(Java实现)

/**  * 插入排序的思想好比对手中的扑克牌排序;  * 好比左手为空,桌面牌面朝下,我们每次拿  * 起一张桌面的牌,将其插入左手正确的位置,  * 在插入过程中,将被插入的牌按某一顺序逐个  *...
  • gongcan1219
  • gongcan1219
  • 2015-06-18 00:14
  • 302

插入排序——迈进希尔的演化

看插入排序如何迈进希尔排序
  • wgp15732622312
  • wgp15732622312
  • 2017-06-26 15:22
  • 224

java算法——插入排序

/* * 功能:java实现插入排序 * */ package Shuzu; public class paixun2 { public static void main(String[]...
  • tingzhiyi
  • tingzhiyi
  • 2016-07-11 15:07
  • 172
    个人资料
    • 访问:468431次
    • 积分:6040
    • 等级:
    • 排名:第4870名
    • 原创:159篇
    • 转载:28篇
    • 译文:0篇
    • 评论:246条
    博客专栏
    最新评论