zoukankan      html  css  js  c++  java
  • 算法导论第二章、插入排序

    1. 插入排序类似于整理扑克牌(排列好顺序的扑克和待排序的扑克);

    2. 插入排序(INSERTION-SORT)参数是一个数组A[1..n]共n个数,输入的各个数字原地排序(sorted in place),分为排好序的和待排序的,每次取一个待排序元素,找到插入的位置,插入已排好序的部分中。元素取完程序结束,复杂度O(n^2)

    3. 伪代码如下:

    INSERTION-SORT(A) 
    for j <- 2 to length(A) 
        do key <- A[j] 
        //Insert A[j] into the sorted sequence A[1..j-1], A下标从1开始存储数据,其中下标1~j-1的数据是排好序的 
        i <- j-1 
        while i > 0 and A[i] > key    //i>0是控制与j之前所有数据比较的次数,A[i]>key控制数字是从小到大排列,当拍好数据的数大于key时,互相颠倒 
              do A[i + 1] <- A[i] 
               i <- i-1    //换下一个下标数据进行比较 
       A[i+1] <-key    //key比sorted序列的值都大,则key称为下一个sorted序列加入的数值

    4. 具体C代码如下:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 void InsertSort(int A[]){
     5     int i, j;
     6     int key;
     7     
     8     for(j = 1; j < 6; j++){
     9         key = A[j];
    10         i = j - 1;
    11         
    12         while(i >= 0 && A[i] > key){
    13             A[i + 1] = A[i];
    14             i--;
    15         }
    16         
    17         A[i + 1] = key;
    18     }
    19 }
    20 
    21 
    22 int main(){
    23     int i;
    24     int A[6] = {5, 2, 4, 6, 1, 3};
    25     
    26     printf("A[]...\n");
    27     for(i = 0; i < 6; i++){
    28         printf("%d ", A[i]);
    29     }
    30     
    31     InsertSort(A);
    32     
    33     printf("\nafter A[]...\n");
    34     for(i = 0; i < 6; i++){
    35         printf("%d ", A[i]);
    36     }
    37     
    38     system("pause");
    39     return 0;
    40 }

    运行截图如下:

  • 相关阅读:
    家庭内网向导帮助文档
    Nginx 容器连接 php rc-fpm 容器编译 php
    samba 容器实现共享
    编程思想(POP,OOP,SOA,AOP)
    OOP(面向对象编程)
    MySql5.6 Window超详细安装教程
    JAVA设计模式:状态模式
    Mysql设置创建时间字段和更新时间字段自动获取时间,填充时间
    eclipse里新建work set,将项目分组放在不同文件夹
    错误记录
  • 原文地址:https://www.cnblogs.com/syd192/p/4409934.html
Copyright © 2011-2022 走看看