• 直接插入排序


    先上代码。

    /**
    **  @author:hushunfeng
    **    直接插入排序
        从小到大进行排列
    */
    #include<stdio.h>
    
    void insertSort(int *array,int arraySize) {
        //用于缓存被插入数
        int temp;
        int i;
        int j;
        for(i=1;i<arraySize;i++) {
            //将被插入数先进行缓存
            temp = array[i];
            //将被插数和“已排好序的各个元素”进行比较
            //比较顺序为从后往前
            //一旦不符合if语句内的条件,跳出for循环
            for(j=i-1;j>=0;j--) {
                if(temp<array[j]) {
                    array[j+1] = array[j];
                }
                else break;
            //将temp中的数据放到相应的位置
            array[j] = temp;
            }
        }
    }
    
    void display(int *array,int num) {
        int i;
        for(i=0;i<num;i++) {
            printf("%d
    ",array[i]);
        }
    }
    
    void main() {
        int array[8] = {4,10,9,7,8,3,6,5};
        insertSort(array,8);
        display(array,8);
    }

     注意点:将被插数和“已排好序的各个元素”进行比较只能是从后往前!不能从前往后!!理由:被插数的内容是已经被缓存起来了,所以说可以用挨着它的元素里的数据刷新掉这个被插数内容,如果从前往后,有用的,没有缓存着的数据被更改刷新了。

    直接插入排序的思路:

    1. 从第一个元素开始,该元素可以认为已经被排序

    2. 取出下一个元素,在已排序序列中从后向前扫描

    3. 如果已排序中的元素大于/小于新元素,将该排序中的这个元素后移(其实并不是大批量数据的移动,一次只移动一个位置,将其移动到下一个位置)

    4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

    5. 将新元素插入到移动后腾空出来的位置

    6. 重复步骤2~5

  • 相关阅读:
    全局变量 static变量
    【Qt学习笔记】04_单选复选框
    【Qt学习笔记】03_特殊标签
    【Qt学习笔记】02_颜色对话框
    【Qt学习笔记】01_模态和非模态
    ThinkPad_E570 拆机
    VMware 共享文件夹
    【安装Flutter遇到的问题】 Android license status unknown
    VLC 外挂字幕乱码
    IE(IE6/IE7/IE8)支持HTML5标签--20150216
  • 原文地址:https://www.cnblogs.com/hushunfeng/p/3892539.html
Copyright © 2020-2023  润新知