插入排序

(是稳定的,时间复杂度O(n^2)),性能上比冒泡和选择好一点

降序

  1. 从第1位元素开始,比较第1与第0大小,后者比前者大就交换,就排好了前2位元素。
  2. 让第2位元素与第1位元素比较,后者比前者大就交换,再让第1位与第0位比较,后者比前者大就交换,就排好了前3位元素。如果后者没前者大就结束排序。
  3. 让第n位与前n个排好的元素依次比较,后者比前者大就交换,如果后者没前者大就结束排序。依次类推。。。(注:第0位元素为第1个)

c++实现:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 void sort(int *array)
 6 
 7 {
 8 
 9 for(int i=1;i<10;i++)
10 
11 {
12 
13 for(int j=i-1;array[i]>array[j]&&j>=0;j--,i--)
14 
15 swap(array[i],array[j]);
16 
17 }
18 
19 }
20 
21 void main()
22 
23 {
24 
25         int array[10]={5,2,1,7,8,9,4,1,3,10};
26 
27         sort(array);
28 
29         for(int i=0;i<10;i++)
30 
31                   cout<<array[i]<<" ";
32 
33 }
View Code

java实现:

package com.sort;


public class Sort {
    
  
    public static void print(int list[]){
        for(int i=0;i<list.length;i++){
            System.out.println(list[i]);
        }
    }
    
   
    public static void insertSort(int list0[]){
        
        int i,j;
        
        /*新建一个比原数组长度大1的数组,第一位元素为0*/
        int list[] = new int[list0.length+1];
        list[0] = 0;
        for(i=1;i<list.length;i++){
            list[i] = list0[i-1];
        }

        /**
         * {6,4,2,5,8,7,3,9,0,1}
         * {0,6,4,2,5,8,7,3,9,0,1}
         * 循环1
         * l[2]=4和它前一个元素l[1]=6比,比它小
         * l[0]=l[2]=4,l[1]=6覆盖l[2]=4,此时l[2]=6,l[1]=6
         * l[0]=4覆盖l[1],此时{4,4,6,2,5,8,7,3,9,0,1} 1到2号元素是排好序的
         * 循环2
         * l[3]=2和它前一个元素l[2]比较,比它小
         * l[0]=l[3]=2,...{2,2,4,6,5,8,7,3,9,0,1} 此时1到3号元素是排好序的
         * l[4]=5和它前一位比较,先把这个元素放到l[0],然后比它大的元素依次往后移一位,l[0]再插入到腾出来的那个位置
         * {5,2,4,5,6,8,7,3,9,0,1}此时1到4号元素是排好序的
         * 依次类推....
         * 
         * */
        //排序
        for(i=2;i<list.length;i++){
            if(list[i] < list[i-1]){
                list[0] = list[i];
                for(j=i-1;list[j] > list[0];j--){
                    list[j+1] = list[j];
                }
                list[j+1] = list[0];
            }
            
        }
        
        //收尾,把排好序的元素放回list0,去掉那个缓冲区0号元素
        for(i=1;i<list.length;i++){
            list0[i-1] = list[i];
        }
    }

    
    public static void main(String[] args) {
        
        int list0[] = new int[]{6,4,2,5,8,7,3,9,0,1};
//        int list1[] = new int[]{9,8,7,6,5,4,3,2,1,0};
//        int list2[] = new int[]{2,1,3,4,5,6,7,8,9};
        insertSort(list0);
        print(list0);
        
    }
    
    

}
View Code
原文地址:https://www.cnblogs.com/wwzyy/p/4386044.html