• 认识直接插入排序算法


    插入排序

    排序原理

    假设待排序的元素存储在一个数组R[0 , n]中了,排序过程中的某一时刻,数组被划分为两个区间R[0 , i-1]和R[i , n].其中R[0 , i-1]为已经排序好的区间(有序区),R[i , n]是未排序好的区间(无序区)。刚开始i =0,我们已经排序好的区间中之包括R[0]这一个元素,待排序区间为R[1,n],我们从无序区取出一个元素(下标最小的元素)R[i]插入到有序区的合适的位置使得 R[k-1] <= R[k] <= [k+1],重复上面的插入操作,我们的排序便完成了。现在的重点转移到了找合适的位置R[k]了。我们倒序遍历有序区,若R[i - 1]大于R[i],则将R[i-1]向后移动一位,再比较R[i-2]和R[i],若R[i]大于R[i-2],那么就将R[i]插入到R[i-2]之后R[i-1]之前。是不是有点类似于斗地主摸牌呢,我们摸了牌之后,给他找到一个合适位置,让后将他插入,最后摸牌结束之后,手上的牌正好是有序的。

    代码实现

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    void InsertSort(int *arry, int len)                   //向后遍历无序区间
    {
        int i,j,temp;
        for(i=1;i<len;i++)
            {
                temp = arry[i];                          //待插入的元素
                for(j=i-1;j>=0 && arry[j] > temp;j--)    //向前遍历有序区间
                    {
                        arry[j + 1] = arry[j];           //移动有序区间元素
                    }
                arry[j+1] = temp;                        //插入待插入元素到有序区间
            }
    }
    

    int main()
    {
    int unSort[1000];
    int i;
    time_t t;
    time(&t);
    srand((unsigned int)(t));
    for(i=0; i<1000; i++)
    {
    unSort[i] = (int)(rand() *1000 / (RAND_MAX + 1));
    }
    InsertSort(unSort, sizeof(unSort) % sizeof(int));
    for(i=0; i<1000; i++)
    {
    printf("%d ",unSort[i]);
    }
    return 0;
    }

  • 相关阅读:
    【知识整理】这可能是最好的性能优化教程(一)
    【工作感悟】Android 开发者,如何提升自己的职场竞争力?
    MySql 主从复制
    MyCat 介绍、分片规则、调优的内容收集
    MyCat 安装部署,实现数据库分片存储
    [转]Activemq管理和基本介绍
    [转]ActiveMQ 即时通讯服务 浅析
    Redis 3.0集群 Window搭建方案
    【转】史上最全的“大数据”学习资源整理
    【转】【漫画解读】HDFS存储原理
  • 原文地址:https://www.cnblogs.com/shuimojun/p/3802314.html
Copyright © 2020-2023  润新知