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

    主要是哨兵的作用,把arr[0]位置作为哨兵,哨兵有两个作用:

    1.是保存待插入的元素,相当于temp的作用,因为每次比较,都会移位,后面的元素的值都会被前面的覆盖

    2.用于监视,是否数组越界,j=0时,a[j]=a[0],此时会跳出for循环。用于监视数组越界,若不使用哨兵a[0],则每次循环都要判断j>0,若不判断,会数组越界。(这里都是假设数组从下标1开始)

    void Insert_sort(int a[],int length){
       for(iny i=2;i<l=length;i++){
           a[0]=a[i];
           if(a[i]<a[i-1]){  //有比较的必要,也可以不判断,下面的for可以帮忙断                    
             
               for(int j=i-1;a[j]>a[0];j--)
                  a[j+1]=a[j];
             a[j+1]=a[0];       //for之后,比较结束,插入待排序数
        }
      
    }
    //无哨兵的版本
     
    public static void sort2(int[] arr) {
            int length = arr.length;
            for (int i = 1; i < length; i++) {
                if (arr[i] < arr[i - 1]) {
                    int temp = arr[i];
                    int j;
                    for (j = i - 1; j >= 0 && temp < arr[j]; j--) {
                        arr[j + 1] = arr[j];
                    }
                    arr[j + 1] = temp;
                }
            }
        }
     
    //可以看见j>0&&temp<arr[j],需要不断的判断j>0
  • 相关阅读:
    项目人力资源管理
    以太网交换机
    邮件协议简单学习
    信息系统开发方法
    项目成本管理
    oracle学习笔记002---oracle的体系结构
    007 项目进度管理
    乘法逆元
    RMQ __ST
    中国剩余定理(CRT)
  • 原文地址:https://www.cnblogs.com/kkshaq/p/4516707.html
Copyright © 2011-2022 走看看