排序算法—————————————————插入排序

      最近几天在学习这个数据结构算法相关的,首先学习到的一个排序的算法就是插入排序。排序在生活中是非常常见的,比如在网购中我们筛选商品会根据评论,购买数量,价格,等内容的排序去选择我们想要的商品。由此可见排序在我们的生活中是非常有用的。

插入排序分为两个部分第一个是简单的的插入排序,第二个是希尔排序相对于简单的插入排序的一个优化!

一.简单插入排序

1.1.基本思路

   我们排序算法简单的情况来说我们就是升序和降序我们接下来统一使用升序排序降序就是改变一个方向的问题。

1.我们需要先创建一个数组去用于接收我们输入进代码的一个整形内容的一个串:当然这个串不一定是一个整形。

2.构建一个函数去实现我们插入函数的一个内容:

我们获取到了这样的一个字符串:9 8 7 6 5 4 3 2 1 0 我们要把它排成一个升序序列:

我们简单的插入排序的一个思路是:

1:先从头开始遍历我们的整形字符串:

2.每次遍历到的那个整形都保存下来,使用保存下来的哪一个数值去跟这个数组保存下来这个数(这个数我们给它定义为tmp)的前面的所有数字去比较如果我们前面的数比我们拿到的这个tmp大的话我们的tmp是不是就可以放到前面的这一个位置然后我们前面原来的这个数字就可以向后放一个,但是我们想我们的这个tmp是不是在两种情况下就会放数值(但是所有的数比较是一种不是特别好的情况);

3.第一种情况我们tmp一直在向前面寻找比自己小的数字只有找到的数字比自己小自己就可以放到这个比自己小的数字的下一个位置。

4.第二种情况就是说我们一直向前寻找但是找到数组第一个数字发现第一个数字都要比我大那么我们就让这个数组的第一个位数向后移动一位把tmp直接放到这个数组的第一个位置

5.我们这个排序过程中任意的一个情况就是我们的(0,end)这个范围在数组中是有顺序的就是升序我们实现的主要思路就是把我们的(0,end+1)的范围变得有顺序》

1.2代码实现

 排序算法—————————————————插入排序_第1张图片

 

1.3画图讲解

排序算法—————————————————插入排序_第2张图片

 二.希尔排序

2.1.基本思路

    我们希尔这个人就想到了这样的一个方法,我们基本的插入排序每一次找都是移动一个位置如果第一个数字是最大的我们想要把这个数字移动到最后面这个过程是非常多的,那么他就想我们可以先让这个数组变得稍微有序一些那么到了我们的这个每次移动1的时候就减少了我们的移动次数;降低了我们的时间复杂度;

我们假设我们有一个gap每次不向前移动1  ,向前移动gap位,去比较我们的数组内容;

我们的简单变历的思路是把我们当前的数值arr[i]当成tmp(end+1),前一个当成end;所以说在希尔中我们的当前一个是arr[i]    tmp(end+gap)  ,前一个是end;

排序算法—————————————————插入排序_第3张图片

 之前我们每一次跳1,现在我们每一次跳gap这样我们就可以把特别大的数快速移动到我们的后面,较小的数快速的移动到前面;我们的思路就是当前的数值arr[i]当成tmp(end+1),前一个当成end;所以说在希尔中我们的当前一个是arr[i]    tmp(end+gap)  ,前一个是end;所以说我们一开始的数值就要从gap开始如果不是这样我们的end会越界,导致我们while(end>=0)都进入不了;

排序算法—————————————————插入排序_第4张图片

 

这里我们会注意到我们的gap的数值是一直在变小的,并且我们的每一次的gap排序完成之后我们的数组都会变得更加的有序!

画图讲解

排序算法—————————————————插入排序_第5张图片

 为什么希尔排序要更好?

我们举一个例子

排序算法—————————————————插入排序_第6张图片

 说明一下我们个malloc'两个数组数组的内容是生成的随机数;两个数组分别是a1和a2   ,大小都是N我们给N=100000这样的大小,这个colock这个函数的数值是这个代码运行到当前位置时消耗的时间,所以我们想要区分两个排序算法的时间复杂度可以使用结束排序函数之后的当前位置的消耗时间去减去之前的我们拿到的就是这个函数执行需要的时间;

排序算法—————————————————插入排序_第7张图片

 我们看到这样的一个结果这个数字单位时间是毫秒;当N的数越来越大他们两个函数之间的差距越来越大;

N=500000

排序算法—————————————————插入排序_第8张图片

 由此可见这个希尔排序是不是特别厉害;今天的分享就到这里了!

希望大家多多支持!!!

排序算法—————————————————插入排序_第9张图片

 

 

你可能感兴趣的:(排序算法,算法)