直接插入排序C语言实现

直接插入排序是最简单的排序算法,基本思想是每次将一个带排序的记录,按其关键字大小插入到前面已排序好的子序列中,直到全部数据完成。

其相应的C代码实现如下:

#include "stdio.h"

void InsertSort(int a[], int n)  //直接插入排序
{
int i,j,temp=0;
for(i=1;i<n;i++)
{
if(a[i]<a[i-1])
{
temp = a[i];
for(j=i-1;j>=0 && a[j]>temp;j--)
{
a[j+1]=a[j];
}
a[j+1]=temp; //
}
}

}

void main()
{
int a[10]={0,6,67,34,56,45,12,4,7,49};
int i=0;
InsertSort(a,10);
for(i=0;i<10;i++)
printf("%d ",a[i]);

}

该算法的时间复杂度为O(n^2),空间辅助度为O(1),由于该排序算法先比较记录的大小,因此是稳定的排序算法。

时间: 2024-11-03 05:03:20

直接插入排序C语言实现的相关文章

插入排序C语言实现

插入排序可是说是最简单的排序算法之一了,时间复杂度是O(N^2),下面是C语言实现 void insertion_sort(int *A, int n) { int i, j, x; //i从1开始而不是从0或2开始 for (i = 1; i < n; i++) { x = A[i]; j = i - 1; //j >= 0时迭代,j的位置可以看成是"空槽的前一个位置",所以最后一个空槽是下标为0的地方 while (j >= 0 && A[j] &

【算法】插入排序C语言实现

不知道大家喜不喜欢打扑克?哈哈,我就挺喜欢的,尤其是三人斗地主,很喜欢.现在我来描述一幅画面看看大家熟不熟悉. 我抓牌的习惯是,在抓牌的时候,我要看着我的牌,看看牌的状况,有没有大小鬼,有几个2,有没有长的连,顺便做好基本的排序工作.比如我第一张牌抓的是7,放在手里,第二张牌是J,我把它放在7的后面(对,我默认是左到右升序的的),第三张是10,我把它放在7和J之间,第四张牌还是10,那么我就有两个位置可以防止这个刚刚到来的10,一是把他放在J的前面,二是把它放在第一个10的前面也就是7的后面,这

插入排序——C语言

插入排序 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.  (每步将一个待排序的元素,按其排序码大小插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止) 具体算法描述如下: 1.将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列: 2.取出下一个元素,在已经排序的元素序列中从后向前扫描: 3.如果该元素(已排序)大于新元素,

直接插入排序(带哨兵和不带哨兵)

前言 插入排序(insertion sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止. 直接插入排序 基本思想 假设待排序的记录存放在数组R[1..n]中.初始时,R[1]自成1个有序区,无序区为R[2..n].从i = 2起直到i = n 为止,依次将R[i]插入当前的有序区R[1..i - 1]中,生成含n个记录的有序区. 排序方法 将待插入记录R[i]的关键字从右向左依次与有序区中记录R[j](j=i - 1, i - 2,

常见的9种内部排序(C语言实现)

现在已经把常见的9种内部排序算法都用C语言实现了,为了方便自己和大家查看,就弄了这么一个类似于导航目录的东西. 一.冒泡排序 冒泡排序(C语言版) 二.选择排序 选择排序(C语言版) 三.直接插入排序 直接插入排序(C语言版) 四.希尔排序 希尔排序(C语言版) 五.归并排序 归并排序(C语言版) 六.基数排序 基数排序(C语言版) 七.快速排序 快速排序(C语言版) 八.计数排序 计数排序(C语言版) 九.堆排序 堆排序(C语言版) 介绍完这九个常用的排序算法,怎么能没有一个比较呢?下面是我对

直接插入排序(Straight Insertion Sort)的C语言实现

原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 直接插入排序(Straight Insertion Sort)的基本思想是将新记录插入到已经排好序的有序表中,初始有序表只有无序表的第一个数据,依次对无序表每个数据进行直接插入排序,从而得到了有序表,具体步骤为 若新记录<有序表高位l.r[j],则设置哨兵 有序表后移,j+1=j 重复第2步,直至新纪录>=有序表中的j记录,则j+1就是要插入的位置 从而得到一个新的.记录数增加1的有序表

折半插入排序(Binary Insertion Sort)的C语言实现

原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 折半插入排序(Binary Insertion Sort)的基本思想是将新记录插入到已经排好序的有序表中,初始有序表只有无序表的第一个数据,依次对无序表每个数据进行折半插入排序,从而得到了有序表,具体步骤为 先将记录存在L.r[0]中,low=有序表低位下标,high=有序表高位下标 若low<=high,就将L.r[0]与mid=(low+high)/2位的数据比较,如果L.r[0]>

2-路插入排序(2-way Insertion Sort)的C语言实现

原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 2-路插入排序(2-way Insertion Sort)的基本思想: 比fisrt小的元素,插入first前面: 比final大的元素,插入final后面, 比fisrt大且比final小的元素插中间 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 1 #include <stdio.h> 2 #define LEN 6 3 4 typedef float

排序(2)---------简单插入排序(C语言实现)

插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 通俗解释: ①假设初始序列的第一个元素是有序的(当一个序列只有1个元素时,我们可以认为其是有序的). ②从第二个元素开始与前面的元素进行比较,如果比前面的大