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

    先上代码。

    /**
    **  @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

  • 相关阅读:
    Linux makefile教程之概述一[转]
    Valid Parentheses
    Letter Combinations of a Phone Number
    机器学习经典分类算法 —— C4.5算法(附python实现代码)
    3Sum Closest
    3Sum
    Integer to Roman
    寒假文献阅读(四)
    Longest Common Prefix
    Roman to Integer
  • 原文地址:https://www.cnblogs.com/hushunfeng/p/3892539.html
Copyright © 2011-2022 走看看