算法不归路之插入排序(C版)

  顺手来一发《算法导论》中的插入排序。核心思路为准,实现为准。

#include<stdio.h>
#define N 10
int main(){
    int a[N];
    int i, j;
    for (i = 1; i < N; ++i){
        scanf("%d", &a[i]);
    }

    for(j = 2; j < N; ++j){
        a[0] = a[j];
        i = j - 1;
        while(i > 0 && a[0] < a[i]){
            a[i + 1] = a[i];
            --i;
        }
        a[i + 1] = a[0];
    }

    for(i = 1; i < N; ++i){
        printf("%5d",a[i]);
    }

    return 0;
}

  

时间: 2024-10-09 22:53:15

算法不归路之插入排序(C版)的相关文章

[3] 算法之路 - 插入排序

插入排序 – 算法 1.将排序部分分成两部分 2.每次从后面部分取最前面的数插入到前面部分的适当位置 该处提供两个插入排序版本,指定间隔插入与插入排序.后面对指定间隔排序提到Shell排序中的n/2间隔与Sedgewick间隔 例如: 排序前:92 77 67 8 6 84 55 85 43 67 [77 92] 67 8 6 8455 85 43 67 将77插入92前 [67 77 92] 8 6 8455 85 43 67 将67插入77前 [8 67 77 92] 6 8455 85 4

[4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔

题目 插入排序法由未排序的后半部前端取出一个值,插入已排序前半部的适当位置,概念简单但速度不快. 排序要加快的基本原则之一: 是让后一次的排序进行时,尽量利用前一次排序后的结果,以加快排序的速度,Shell排序法即是基于此一概念来改良插入排序法. 解法 Shell排序法最初是D.L Shell于1959所提出,假设要排序的元素有n个,则每次进行插入排序时并不是所有的元素同时进行时,而是取一段间隔. Shell排序算法 – n/2间隔 Shell首先将间隔设定为n/2,然后跳跃进行插入排序,再来将

算法大神之路----排序(插入排序法)

插入排序法 所谓插入排序法乃是将一个数目插入该占据的位置. 输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕. 代码示例: import java.util.Random; /** * 算法大神之路----排序(插入排序法) */ public class Study03 { public static void main(String[] args) { //新建一个数组 int[] arr = n

那条矩阵乘法的不归路——数列

话说今天搜矩阵相乘,没有一个人用pascal写,是不是学到矩阵相乘的孩子都果断转c++了...我可是有良心的写博人,当然附上pascal代码 故事开始了 今天看到这样一个题 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1]  (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 然后是它的数据范围 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7: 对于100%的数据 T<=100,n<=2*10^9: 当我

前端小白的算法之路

时隔多日终于解决了埋在心头的一道难题,霎时云开雾散,今天把一路而来碰到的疑惑和心得都记录下来,也算是开启了自己探索算法的大门. 问题背景 曾经有一个年少轻狂的职场小白,在前端圈子里摸爬滚打将近两年,本计划在js的道路上越走越远,以至于每天沉浸在js红皮书里不能自拔,突然有一天脑抽想找leader比划两下,于是出现了下面的对话,小白:leader,您最近在干嘛?手里有需要亟待解决的难题吗?leader:咦,确实有哎,咱的项目随着业务的不断发展,日均PV也越来越多,公司的两台机器已经快满足不了需求,

《排序算法系列3》插入排序

1 原理 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 插入排序的工作方式非常像人们排序一手扑克牌一样.开始时,我们的左手为空并且桌子上的牌面朝下.然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置.为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较,如下图所示: 2 思路 从第2个数开始,放到前面的数组中,形成一个有序数组 然后把第3个数放到前

走入asp.net mvc不归路:[2]控制器概览

asp.net mvc中最灵活的地方就是控制器,这里可以验证数据,可以跳转视图,还可以访问数据库等等.所以,我们要先从这里说起. 1 控制器就是继承了Controller的类,一般来说,类名后面都会增加"Controller"字样,asp.net mvc是一个约定优先的框架,在这里就能看到一点点端倪,接下来还要涉及到其他约定 2 这个控制器里面,有一些方法,其中图示的public并且返回值为ActionResult的方法就是所谓的Action,可以理解为动作.行为.功能等:图示就是登录

走入asp.net mvc不归路:[1]项目文件结构

先来了解一下一个asp.net mvc项目的文件结构. 1 项目文件结构一览 2 mvc,顾名思义,一个项目中最重要的就是这三个东西:M(Model,模型),V(View,视图),C(Controller控制器),其关系一般如下,控制器控制模型和视图,模型传数据给视图: 3 控制器就是控制整个逻辑走向的机制,可以对模型数据进行处理,也可以控制呈现在用户眼前的视图. 4 一般来说,一类的操作会放在同一个控制器中,如账号相关则放于AccountController中,里面有各种Action,即一个一

算法整理(三):插入排序

插入排序很简单,就像打扑克.手里有个牌4,再来一张牌5就本能的放到第一个牌的右边.如果来了个3就从右往左扫描,只要左边的比这个待插入数字大就交换. 插入排序是一种稳定的排序方法,时间复杂度O(n*n),空间复杂度O(1),最好的情况下时间复杂度为O(1).即本来就是一个有序或者相等的数组,则只需比较n-1次即可.下为源码,只需三行代码即可. //============================================================================