插入排序 Insertion sort

原创 2013年12月04日 22:14:59
是一种简单的排序方法。时间复杂度为 O(n^2),即N的平方。在数据量较小的情况下,是比较有效的排序方式。

输入:N个数 < a1,a2,a3.....an >
输出:输入序列的一个排序 <a'1,a'2,a'3.....a'n> 要求 a'1<=a'2<=.....a'n

思想:把序列分为2部分:已排序,未排序。 每次从未排序中取一个数,与已排序中的值比较,插入到合适的位置。

public class InsertSort {
      public static void main(String[] args) {
             // TODO Auto-generated method stub
             int[] a;
            a = new int[30];
            Random rand = new Random();
             for( int i=0;i<a. length;i++){
                  a[i] = rand.nextInt(100);
            }
             println(a);
             long s = System. nanoTime();
             int[] b= sort(a);
             long dur = System. nanoTime() - s;         
             println(b);
            System. out.println(dur);            
      }
      
      public static int[] sort(int[] a){
             for( int i=1;i<a. length;i++){
                   int key = a[i];
                   int j=i-1;
                   while (j>=0 && a[j]>key){
                        a[j+1] = a[j];
                        j=j-1;
                  }
                  a[j+1] = key;
            }
             return a;         
      }

      public static void println(int[] a){
            System. out.print( "[");
             for ( int i = 0; i < a. length; i++) {
                  System. out.print(a[i]);
                   if(i != a. length-1)
                        System. out.print( ",");
            }
            System. out.println( "]");
      }
}


直接插入排序(Straight Insertion Sort)

写排序方法之前还是先介绍一下排序相关的概念: 排序:将任一资源(内存中的数据或文件等等)通过某种方式整理成 按关键字 有序排列的过程 叫排序。 排序的稳定性: 对序列中的两个或两个以上的相等的数据(R...

2.1 插入排序(insertion_sort)

输入:n个数的一个序列[a1,a2,a3,...,ana_1,a_2,a_3,...,a_n] 输出:输入序列的一个排列[a∗1,a∗2,a∗3...,a∗na_1^*,a_2^*,a_3^*......

Leetcode刷题记——147. Insertion Sort List(插入排序链表)

一、题目叙述: Sort a linked list using insertion sort. 二、解题思路: Medium题,啊。。。我今天头晕脑胀,写的不太...

[C++] 插入排序法 (Insertion sort)

实现过程: 假设现有一系列顺序未排序数字。 1. 首先,标记第一个数字为已排序。 2. 针对其余未排序数字,提取出其中第一个数字。 3. 对于所有已排序数字,首次呼叫此步骤设置其中最后一个数字...

插入排序(Insertion-sort)

原理jimport java.util.Scanner; public class InsertSort { public static void main(String[] args) { ...

插入排序(INSERTION_SORT)

插入排序(INSERTION_SORT)    1)原理 : 插入排序对于少量的元素排序是一个有效的算法。插入排序的工作方式像是在拿扑克牌一样,最开始的时候手里是空的,每抽到一张牌就将其在另一只手上按...

[C++]LeetCode: 126 Insertion Sort List (插入排序链表)

题目:Sort a linked list using insertion sort. 思路:题目要求我们用插入排序来实现链表排序。我们构建一个当前排好序的链表,然后维护一个变量,不断指向链表中的...

Java实例8 - 插入排序 Insertion Sort

 /** * 选择排序的思想: * 每次循环前,数组左边都是部分有序的序列, * 然后选择右边待排元素,将其值保存下来 * 依次和左边已经排好的元素比较 * 如果小于左边的元素,就将左边的元...

【算法】插入排序 insertion_sort

准备写个《STL 源码剖析》的读书笔记,开个专栏,名为《STL 的实现》,将源码整理一遍。很喜欢侯捷先生写在封底的八个字:天下大事,必作于细!他在书中写到: 我开玩笑地对朋友说,这本书出版,给大学课程...
  • Justme0
  • Justme0
  • 2014年04月22日 17:20
  • 2350

插入排序(insertion sort)(二)

基本思想:每趟将一个元素,按其关键字大小,插入到它前面已排序的子序列中,使得插入后的子序列仍是排序的,一次重复直到全部元素插入完毕。 插入排序算法有三种:直接插入排序、折半插入排序和希尔排序。 1.直...
  • DADADIE
  • DADADIE
  • 2015年03月29日 09:40
  • 738
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:插入排序 Insertion sort
举报原因:
原因补充:

(最多只允许输入30个字)