• 数据结构之插入排序 安静点


     插入排序

     如下图:如果此时要插入元素7,那么7比10小,10后移,然后7与5比,7比5大,所以7不用再移动位置

    定义:

    插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序 。适用于待排序记录较少并且基本有序的情况。

    代码实现:

       class InsertSort
        {
            /// <summary>
            /// 升序
            /// </summary>
            /// <param name="arr"></param>
            public static void Sort(int[] arr)
            {
                int n = arr.Length;
                //i=1是因为插入排序是从后往前比。比如下面数组,一开始是要将5默认为一个有序数组,从4开始跟5比。
                //5 4 6 1 7 
                for (int i = 1; i < n; i++)
                {
                    //插入元素e
                    int e = arr[i];
                    //j表示元素e应该插入的位置
                    int j;
                    for (j = i; j > 0; j--)
                    { 
                        if (e < arr[j-1])
                        {
    //因为插入的元素比有序数组中的某个值小,所以将有序数组中的这个值后移 arr[j]
    = arr[j - 1]; } else { //此时说明不用再比较了 break; } } //通过for循环判断,最终找到了j具体的位置,将元素e放在此位置上 arr[j] = e; } } }

    性能对比

    插入排序和冒泡排序还有选择排序都是O(n*n)的时间复杂度,因为都是有2层for循环,但是插入排序要比选择排序要好,是因为插入排序存在break跳出循环的一个动作,只要符合条件了,就可以跳出循环。对于近乎有序的数组其性能更高。

  • 相关阅读:
    openlayers 聚合效果
    OpenLayers 3 实现轨迹回放
    经纬度和墨卡托互相转换
    OpenLayers 3 给features 添加手势
    OpenLayers 3 实现划线,画点
    C# 在窗体的子线程中创建新窗体
    openlayers 3 读取展示shp文件
    地理信息未来5年规划
    OpenLayers3 实现自定义放大缩小滑块,自定义方向按钮
    2014最后一篇,记ExpandableListViewd的自定义
  • 原文地址:https://www.cnblogs.com/anjingdian/p/15226092.html
Copyright © 2020-2023  润新知