基础排序算法···插入排序

嗯。。先让我想一想。。这是要说直接插入排序,这是一种最简单的排序方式,它的基本操作就是把一个操作记录插入到已经排好序的队列中。

这个排序方式很好理解,所以代码也不是很复杂。

先说个当时书上的案例,一组记录:49,38,65,97,76,13,27。。。假设在排序过程中,已经有一个含4个记录的有序数列,

即:38,49,65,97.。接下来就是直接插入排序,这时需要考虑的是76,此时直接插入排序的做法是顺序查找找到合适的位置,

即将76插入到65---97中间,从而得到了一个新的有序数列:38,49,65,76,97.。这里给出代码:

 void InsertSort(SqList &L)
 {
   int i,j;
   for(i=2;i<=L.length;++i)
     if LT(L.r[i].key,L.r[i-1].key)
     {
       L.r[0]=L.r[i];         //哨兵
       for(j=i-1;LT(L.r[0].key,L.r[j].key);--j)
         L.r[j+1]=L.r[j];    //记录后移
       L.r[j+1]=L.r[0];     //插入
     }
     printf("(%d,%d)",L.r[i].key,L.r[i].otherinfo);
   printf("\n");
   }
 }

在这里有一个哨兵的概念,哨兵起监视的作用,避免数组下标越界。其他的就很好理解了。总的来说这个比较好理解,就少说些。

时间: 2024-10-11 05:42:07

基础排序算法···插入排序的相关文章

基础排序算法

七个基础排序算法(均为内部排序): 直接插入排序 希尔排序 冒泡排序 简单选择排序 快速排序 堆排序 二路归并排序 排序算法稳定性:经过排序后,具有相同关键码的元素之间的相对次序保持不变,则称该排序方法是稳定的;否则不稳定. 直接插入排序: void InsertSort(int a[],int n){ // index start at 1, a[0] is temp one int i,j; for(i=2;i<=n;i++){ if(a[i]<a[i-1]){ a[0]=a[i]; a[

九大基础排序算法总结

九大基础排序算法小结 一直想做份总结,总是抽不出时间,趁着周末闲着直接用了一整天做一份,一些内容参考了网上的一些博主的总结,还有网络上的一些图片. 好了,接下来就看看内容吧! 排序算法: 排序方法 时间复杂度 空间复杂度 稳定性 选用情况 平均情况 最坏情况 最好情况 Insertion Sort O(n^2) O(n^2) O(n) O(1) 稳定 n较小时 Selection Sort O(n^2) O(n^2) O(n^2) O(1) 不稳定 n较小时 Bubble Sort O(n^2)

php四种基础排序算法的运行时间比较!

/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 function bubbleSort($array){ $temp = 0; for($i = 0;$i < count($array) -1;$i++){ for($j = 0;$j < count($array) - 1 -$i;$j++){ if($array[$j] > $arra

基础排序算法 c#

算法知识欠缺,学习几种基础排序算法,1. 选择排序  2.冒泡排序 3.插入排序 以升序为例,程序中凡是 两个值的比较前者大于后者,则调换位置 1. 选择排序 最容易想到的排序算法,但却不知道这种叫做选择排序法 1 /// <summary> 2 /// 选择排序 3 /// </summary> 4 /// <param name="sourceValues"></param> 5 /// <returns></ret

php四种基础排序算法的运行时间比较

/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 function bubbleSort($array){ $temp = 0; for($i = 0;$i < count($array) -1;$i++){ for($j = 0;$j < count($array) - 1 -$i;$j++){ if($array[$j] > $arra

基础排序算法详解与优化

常见的基础排序有选择排序.冒泡排序和插入排序.众所周知,他们的时间复杂度是 O(n\*n). 但是,现在要重新认识一下基础排序算法,尤其是“插入排序”:在近乎有序的情况下,插入排序的时间复杂度可以降低到 O(n)的程度. 因此,在处理系 原文地址:https://www.cnblogs.com/wdyff/p/9749837.html

经典排序算法 – 插入排序Insertion sort

经典排序算法 – 插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行.   图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入. 以下代码仅供参考,欢迎指正 /// <summary> /// 插入排序 /// </summary> /// <param na

第3章.基础排序算法

3.1.1 数组类测试环境 为了检验这些算法,首先需要构造一个可以实现并测试算法的测试环境.这里将构造一个类来封装数组处理的一些常规操作,即元素插入操作,元素存取访问操作,以及显示数组内容的操作.下面就是程序的代码: namespace 第3章.基础排序算法 { class Program { static void Main(string[] args) { CArry nums = new CArry(50); for (int i = 0; i <= 49; i++) { nums.Ins

基础排序算法(冒泡排序,选择排序,插入排序)

最近经常调用api中的排序算法,很少自己写了,有时候也只写写快速排序这些比较快的排序,然而刚开始学排序时用的一些基本的排序算法却有点忘了 正好今天Java老师让我们每个人写个选择排序热热手,趁这个机会再来复习下一些基本的排序好了. 一.冒泡排序(稳定排序) 学编程接触到的第一个排序算法,基本思路就是,给定一个无序数组a0.a1.a2.a3....an; 通过从左到右相邻的元素两两比较,把最大或者最下的数依次放到数组的右边,最后得到有序的序列 public static void maoPao(i