经典算法:插入排序的实现,通过交换,与众不同!

Posted seen_in_hw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典算法:插入排序的实现,通过交换,与众不同!相关的知识,希望对你有一定的参考价值。

前言

在我的博客里面,我前面写了一篇关于插入排序的实现报告,这篇报告中规中矩,就是最基本的那种插入排序,一个函数起码也得写的估计有20多行代码,然后今天突然灵感一来,发现一种更加高效的方法,然后撰一篇文以记之,希望大家能够喜欢。
附上我的上篇插入排序博文链接:
http://blog.csdn.net/qq_23100787/article/details/48159551

介绍

插入排序无非就是这样的,序列分为无序和有序的序列,每次从无序的序列找出第一个,然后插入进有序的序列,这样有序的序列长度就会增加,无序的序列长度就会减少,然后最后如果有序序列的长度等于数组长度,说明排序完成。

这里最常用的方法插入进去,就是通过在有序序列里查找后面想插入进来的那个无序数,找到位置后然后通过移位把这个数插入进去,而上篇博客用的就是这种方法。

这篇文章介绍一个新方法

那就是想象前a[0]到 a[j-1]个数都是有序的,然后a[j]个数如何插入进来,这里采用了这种方式,这里默认序列是从小到大排列的。
做一次循环for(j=i-1;j>=0 &&a[j]>a[j+1];j–) 如果满足a[j]>a[j+1],就把这两个数进行交换,假设从第一个考虑起,就是有序的最后一个大于新插入的,这时候不知道前面还有没有比新插入的大的,因此要继续循环,然后交换,直到找到前面序列不比他大的,这样就可以停止循环了,并且这种情况就能达到想要的有序状态

文字说的很模糊,但是我又不会画图,所以这里需要自己去画个图去好好想想,是可以做到的 = =

最后就附上代码和运行截图吧~

代码

// 插入排序
#include <iostream>
using namespace std;
void insert(int a[],int n)
    for(int i=1;i<n;i++)
        for(int j=i-1;j>=0 &&a[j]>a[j+1];j--)
            swap(a[j],a[j+1]);
        
    

void swap(int *a,int *b)
    int temp = *a;
    *a = *b;
    *b = temp;

int main()
    int a[] = 2,7,8,9,3,6,5,1;
    insert(a,8);
    for(int i=0;i<8;i++)
        cout<<a[i]<<" ";
    

这里代码就20行左右,大大减少了代码量 = =,这种通过交换实现的插入排序也是很不错的~

运行截图

原来序列是无序的,现在已经达到了有序状态,说明功能完成了 = =

ok~

以上是关于经典算法:插入排序的实现,通过交换,与众不同!的主要内容,如果未能解决你的问题,请参考以下文章

JAVA实现经典排序算法(冒泡排序选择排序插入排序希尔排序堆排序归并排序快速排序)

九种经典排序算法汇总

九种经典排序算法汇总

七种经典排序算法最全攻略

算法与数据结构--经典排序算法Python实现

一起来用python实现一下十大经典排序算法呀