数据结构之排序(四)——直接插入排序
来源:互联网 发布:手机数据报告 艾瑞 编辑:程序博客网 时间: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)
直接插入排序法比冒泡和简单选择排序的性能要好一些。
算法稳定性
稳定
阅读全文