算法(一):插入排序

[email protected]:/mnt/shared/appbox/issort# cat issort.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int issort(int *array, int num)
{
        int i, j, tmp;

        for(j=1; j<num; j++)
        {
                tmp = array[j];
                i = j - 1;
                while( i >= 0 && array[i] > tmp)
                {
                        array[i+1] = array[i];
                        i--;

                }
                array[i+1] = tmp;
        }
        return 0;
}

int main(int argc, char *argv[])
{
        int i;
        int a[10] = {1,3,5,7,9,2,4,6,8};

        issort(a, 9);

        for(i=0; i<9; i++)
        {
                printf("%d,", a[i]);
        }

        printf("\n");

        return 0;
}

时间: 2024-08-24 01:13:37

算法(一):插入排序的相关文章

排序算法 之 插入排序

本次介绍排序算法中的插入排序. 1.直接插入排序: 基本思想: 直接插入排序也需要对待排序的序列在外层进行n-1次遍历,每次遍历时只把本次遍历次数处的元素和该元素之前的元素进行比较,来决定插入位置,并把从插入位置开始到该元素之前的所有元素后移,使从序列开始到该元素为止序列中的元素有序,直至遍历完成序列整体有序,插入排序算法的时间复杂度为O(n2): 如下表格所示为待排序的序列: 3 2 1 7 6 5 4 8 9 当进行第一次遍历时把元素e[1]和e[0]作比较,e[1]<e[0],所以e[1]

算法—2.插入排序

1.基本思想 通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置.在计算机的实现中,为了给要插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位.这种算法叫做插入排序. 与选择排序一样,当前索引左边的所有元素都是有序的,但它们的最终位置还不确定,为了给更小的元素腾出空间,它们可能会被移动.但是当索引到达数组的右端时,数组排序就完成了. 和选择排序不同的是,插入排序所需的时间取决于输入中元素的初始顺序.例如,对一个很大且其中的元素已经有序(或接近有序)

[数据结构和算法]折半插入排序算法笔记

/// <summary> /// 步骤: /// 1.记录当前待排元素 /// 2.标记顺序表有序查找区域下界和上界 /// 3.在顺序表有序查找区域中折半查找等待排序元素的位置 /// 4.把顺序表有序查找区域的某些元素后移一位,以空出位置给等待排序的元素 /// 5.在空出的位置填写当前排序元素 /// </summary> /// <param name="elements"></param> static void SqList

排序算法系列——插入排序

记录学习点滴,菜鸟成长记 接触算法是研究生期间做项目时,需要编写一些诸如GA.QGA的时候,第一次使用“排序”还是用的Java自带的Comparator接口.后来买了<算法导论>来看,发现果然所有知识都是有专业壁垒的,简单的一个问题尽然蕴藏着如此多的思想,发现此简直欣喜无比,遂决定要好好研究研究.只有深入后才发现,原来算法的不仅仅是按照逻辑顺序写个程序那么简单,好的算法要考虑到方方面面,最简单的时间复杂度就够我学习很长时间了. 将自己学习排序算法的一些理解和感悟记录于此,方便自己温故而知新.

算法有插入排序,堆排序,合并排序,快速排序和stooge排序

比较的算法有插入排序,堆排序,合并排序,快速排序和stooge排序, 先说一下比较结果 1,比较插入和stooge排序,stooge的表现如此之差,数组大小在2000时 InsertSort VS StoogeSort 's Running Time:     16ms:47672ms; Terribly! Isn't It? 所以在后面的比较中,没有带stooge这个垃圾算法 2,插入排序,堆排序,合并排序,快速排序运行时间对比 (网易博客的表格功能太差了,不爽,只好以文本对齐展现给大家了):

我的Java开发学习之旅------&gt;Java经典排序算法之插入排序

一.算法原理 插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置. 假设我们输入的是 "53,27,36,15,69,  42" 我们从第二个数字开始,这个数字是27,我们的任务只要看看27有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较27和53,27比53小,所以我们就交换27和53,原来的排列就变成了"27, 53, 36, 15, 69, 42 " 接下来,我们看第3个数字有没有在正确的位置.这个数字是36,它的左边数字是53,36

排序算法之一插入排序

基本思想 每次将一个待排序的记录,按其关键字大小,插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止. 分类 根据寻找插入位置方法分为 直接插入排序 折半(二分)插入排序 希尔插入排序 直接插入排序 基本思想 当插入第i(i≥1)个对象时,前面的V[0],V[1],-,V[i?1]已经排好序.这时,用V[i]的排序码与V[i?1],V[i?2],-,V[0]的排序码顺序进行比较,找到插入位置即将V[i]插入,原来位置上的对象向后顺移. 直接插入排序图示 从上到下,分别展示了直接排

java 算法之插入排序算法

这算是经典算法了,网上很多朋友都写了,有的我看不懂,所以我自己按照我自己所理解的写出来, 我觉得只有自己写出来的东西才是自己的 主要思路: 1.将数组的前两个数进行大小排序 2.将第三个数与前两个数进行比较,将第三个数插入到合适的位置 3.循环 其实这样来将对于新手来说,将其变成代码是有点困难的. 我也是.我很笨,没办法,只有将详细的一步一步写出来 // 数组 [3,5,1,2,8,9] 如有这样一个数组,按照上面的思路,我们从第二个数开始,就是5,5要跟3比较,第二个位置就是5要插入的位置 [

算法学习之排序算法:插入排序(直接插入排序、折半插入排序、2-路插入排序)

引言: 插入排序作为最简单易于理解的排序算法,基本实现比较简单.本文详细介绍直接插入排序,并给出实现,简单的介绍折半插入排序,并给出2-路插入排序和表插入排序两种插入排序,但并未给出具体实现. 一.直接插入排序 直接插入排序的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的.记录数增1的有序表. 算法描述: 步骤1.将待排序的一组记录中的第1个记录拿出来作为一组有序的记录(当然此时该组记录仅有1个记录). 步骤2.依次将待排序的一组记录中的记录拿出来插入到前面已排好序的记录中. 步

java基础算法之插入排序

一.插入排序介绍 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间.时间复杂度:O(n^2); 算法描述:     1.排序从第二个元素开始,第一个元素默认为有序的.     2.取出下一个元素(第一次取第二个,后面依