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

    【基本原理】

    直接插入法思想:
            1.在原始数据中,将第一个数据作为已排序的数据序列
            2.从数组中获取下一个元素,在已经排序好的元素中从后向前扫描,并判断该元素与已排列好的的大小
            3.若排序序列的元素大于新元素,则将该元素移到下一位置
            4.重复步骤三,直到找到已排序的元素小于或者等于行元素的位置
            5.将新元素插入到该位置
            6.重复步骤2~5,直到数据处理完毕

    【举例】

    待排序数组

    【38,65,97,76,13,27,49】

    排序过程

    第一趟插入38:【38,65,97,76,13,27,49】

    第二趟插入65:【38,65,97,76,13,27,49】

    第三趟插入97:【38,65,97,76,13,27,49】

    第四趟插入76:【38,65,76,97,13,27,49】

    第五趟插入13:【13,38,65,76,97,27,49】

    第六趟插入27:【13,27,38,65,76,97,49】

    第七趟插入49:【13,27,38,49,65,76,97

    【代码实现】

    package com.sort;
    
    public class TestInsertSort {
        public static int[] insertSort(int[] a){
            int length=a.length;
            int i,j,tmp;
            for(i=1;i<length;i++){
                tmp=a[i];               //取出一个未排序的数据
                for(j=i-1;j>=0&&a[j]>tmp;j--){ //在排序序列中查找位置
                    a[j+1]=a[j];        //数据向后移动,无须担心被覆盖,因为tmp以保存第一个被覆盖的数据
                }
                a[j+1]=tmp;   //插入数据,因为上面的for循环最后执行了一次j--,所以赋值时a[j+1]
            }
            return a;
        }
        public static void main(String[] args){
            int a[]={2,9,0,8,7,1,5,4,3,6};
            a=insertSort(a);
            for(int i=0;i<a.length;i++){
                System.out.print(a[i]+" ");
            }
        }
    }
  • 相关阅读:
    leetcode 13. Roman to Integer
    python 判断是否为有效域名
    leetcode 169. Majority Element
    leetcode 733. Flood Fill
    最大信息系数——检测变量之间非线性相关性
    leetcode 453. Minimum Moves to Equal Array Elements
    leetcode 492. Construct the Rectangle
    leetcode 598. Range Addition II
    leetcode 349. Intersection of Two Arrays
    leetcode 171. Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5702104.html
Copyright © 2011-2022 走看看