zoukankan      html  css  js  c++  java
  • 插入排序

    (是稳定的,时间复杂度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
  • 相关阅读:
    PCB封装分配
    1.26-CAD异形封装的制作
    1.40-CAE封装6个实例单门制作
    简单的URL解析
    冒泡排序和简单的递归
    作用域的提升
    数组的去重,以及随机一个验证码
    数组和字符串的相互转换。
    substring,substr,和slice的区别详解。
    去除Input输入框中边框的方式
  • 原文地址:https://www.cnblogs.com/wwzyy/p/4386044.html
Copyright © 2011-2022 走看看