数据结构之排序(四)——直接插入排序

来源:互联网 发布:手机数据报告 艾瑞 编辑:程序博客网 时间:2024/06/16 00:35

直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表。

算法

#include "stdafx.h"using namespace std;#include<iostream>#include"stdafx.h"//用于要排序数组个数最大值,可根据需要修改  #define MAXSIZE 10  typedef struct{//用于存储要排序数组,r[0]用作哨兵或临时变量  int r[MAXSIZE + 1];//用于记录顺序表的长度  int length;}SqList;//交换L中数组r的下标为i和j的值  void swap(SqList *L, int i, int j) {int temp = L->r[i];L->r[i] = L->r[j];L->r[j] = temp;}//对顺序表L作直接插入排序void InsertSort(SqList *L) {int j;for (int i = 2; i <=L->length; i++) {//需将L->r[i]插入有序子表if (L->r[i] < L->r[i - 1]) {//设置哨兵L->r[0] = L->r[i];for (j = i - 1; L->r[j] > L->r[0]; j--) {//记录后移L->r[j + 1] = L->r[j];}//插入到正确位置L->r[j + 1] = L->r[0];}}}#define N 9int main(){int d[N] = { 9,1,5,8,3,7,4,6,2 };SqList L0;for (int i = 0; i < N; i++) {L0.r[i + 1] = d[i];}L0.length = N;cout<< "排序前:";for (int j = 1; j < L0.length; j++) {cout<< L0.r[j];}InsertSort(&L0);cout << "\n直接插入排序后:";for (int j = 1; j < L0.length; j++) {cout << L0.r[j];}cout << endl;return 0;}

运行结果


直接插入排序复杂度分析

直接插入时间复杂度为:O(n^2)
直接插入排序法比冒泡和简单选择排序的性能要好一些。

算法稳定性

稳定



阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 发生洪水应该怎么办 船遇到台风怎么办 古人遇到台风怎么办 机场航班取消怎么办 台风很大时怎么办 饥荒海难龙卷风怎么办 外痔越长越大怎么办 手机号码丢了怎么办 苹果手机不见了怎么办 失业找不到工作怎么办 遇到火灾怎么办大班 如果遇到火灾怎么办 遇到森林火灾怎么办 预防火灾应该怎么办 遇上火灾怎么办课件 突遇火灾怎么办ppt 遇到火灾怎么办课件 安全遇到火灾怎么办 发生火灾怎么办ppt 发生电气火灾怎么办 发生火灾怎么办口诀 发生火灾应该怎么办 发生火灾儿童怎么办 油锅起火怎么办? 锅里油着火了怎么办 锅烧油着火了怎么办 着火时应该怎么办 锅着火了怎么办 电器着火应该怎么办 家里电视机着火怎么办 发生交事故怎么办 租车后车辆损坏怎么办 遭遇拥挤怎么办教案 地震时应该怎么办 发生泥石流怎么办 在家地震怎么办 事故伤者不处理怎么办 发现有人触电怎么办 实验室发生火灾怎么办 煤气炉着火怎么办 发生火警怎么办