C语言插入排序

插入排序的过程和斗地主时整理扑克牌的过程是类似的,对于一张新的扑克牌,从第一张手牌开始依次比较,如果位置合适,就在这个位置插入新的扑克牌;

有两点比较关键的地方:

1) 判断何时需要插入;

2)插入新的元素后,在插入位置之后的所有元素的位置都会改变,变成之前的元素;

#include <stdio.h>

int main(int argc, char const *argv[]){    // 将数组按照从小到大排序    int a[] = {3, 5, 7, 4, 2, 9};    int i, j, n, temp;    for(i = 1; i < 6; i++) {        for(j = 0; j < i; j++) {            // 当插入元素较小时,进行插入操作            if (a[i] < a[j]) {                 temp = a[i];                // 数组的元素依次移动                for(n = i; n > j; n--) {                    a[n] = a[n - 1];                }                a[j] = temp;                            }        }    }

    int init;    for(init = 0; init < 6; init++) {        printf("%d\n", a[init] );    }    return 0;}
时间: 2024-10-10 01:27:30

C语言插入排序的相关文章

[C语言] 插入排序之直接插入的特性及实现

[C语言] 插入排序之直接插入的特性及实现 1.算法特性 直接插入是一种简单.稳定的插入排序方法,其时间复杂度最好为O(n).最差为O(n2).平均为O(n2),空间复杂度为O(1). 2.算法思路: 以升序排列为例,先设置一个临时变量存储将要移动的插入值,再将其与其之前的数据从后往前依次进行比较.当比较值比插入值大时,比较值后移一位,插入值继续向前检索:当比较值小于等于插入值时,插入值插入比较值的后一位.经过一轮循环便可以将所有数据排列有序. 3.实现代码 1 #include <stdio.

C语言插入排序算法

#include <stdio.h> #define kCount 10 int main() { int array[kCount] = {92, 77, 67, 8, 6, 84, 55, 85, 43, 67}; for (int i = 1; i<kCount; i++) { int temp = array[i]; int j = i-1; while (temp<array[j]) { array[j+1] = array[j]; j--; if (j==-1) { b

C语言排序和查找

1.C语言选择排序算法及代码 选择排序是排序算法的一种,这里以从小到大排序为例进行讲解. 基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置:然后,选出第二小的数,放在第二个位置:以此类推,直到所有的数从小到大排序. 在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换. 下面,以对 3  2  4  1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置. 第1轮 排序过程 (寻找第1小的数所在的位置) 3

直接插入排序(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个元素时,我们可以认为其是有序的). ②从第二个元素开始与前面的元素进行比较,如果比前面的大

插入排序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语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)

C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆) 虽然直接插入排序,冒泡排序以及二分查找是算法中最为基础以及老掉牙的话题,但作为一名算法的深爱者,有时候无聊时候总会将这些简单的话题重新理解并敲写一番,目的只是为了得到理解娴熟的程度.而且,我觉得越是简单基础的东西,有时候更应该反复的去敲写,深化它,并最终让其中的思想内化为自己的一部分.待到他日一提起之时,会相当娴熟的"刷刷刷..."几分钟搞定,那就很有成就感了! 因为我喜欢对于一个问题进行实例的剖析,进而再转化为特有的用某种