直接插入排序算法,C语言代码实例详解

2022-07-1717:20:22数据结构与算法Comments1,359 views字数 1265阅读模式

1. 复杂度与稳定性文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

最坏情况:O(N^2)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

最好情况:O(N^2)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

平均情况:O(N^2)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

稳定性:稳定排序文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

2. 过程介绍文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

直接插入排序是把新的数据插入以及排序好的数列中,排序的基本方法是:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

可以选择不同的方法在已经排好序数据表中寻找插入位置。根据查找方法不同,有多种插入排序方法,下面要介绍的是直接插入排序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

1.         每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

2.         第一趟比较前两个数,然后把第二个数按大小插入到有序表中;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

3.         第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

4.         依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

3.图示过程文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

以数组数据{ 70,50,30,20,10,70,40,60}为例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

第一趟5070302010704060
第二趟3050702010704060
第三趟2030507010704060
第四趟1020305070704060
第五趟1020305070704060
第六趟1020304050707060
第七趟1020304050607070
第八趟1020304050607070

将红色的数据依次插入组成一个逐渐有序的数组文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

4.  相关的代码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
using namespace std;
void insert_sort(int a[],int n) {
    int i,j;
    for(i=1; i<n; i++) { //循环从第2个元素开始
        if(a[i]<a[i-1]) {
            int temp=a[i];
            for(j=i-1; j>=0 && a[j]>temp; j--) {
                a[j+1]=a[j];
            }
            a[j+1]=temp;//此处就是a[j+1]=temp;
        }
    }
}
 
int main() {
    int a[8]= {70,50,30,20,10,70,40,60};
    int n=7;
    insert_sort(a,n);
    for(int i=0; i<=n; i++) {
        cout<<a[i]<<' ';
    }
    return 0;
}
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/25227.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/suanfa/25227.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定