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 }

    运行截图如下:

  • 相关阅读:
    stm32之watchdog
    stm32之PWM
    stm32之GPIO(二)
    JavaScript之怎样获取元素节点
    JavaScript之对象学习
    JavaScript之数组学习
    Jquery遍历数组之$.inArray()方法介绍
    Jquery 遍历数组之$().each方法与$.each()方法介绍
    C# 移位运算符
    tensorboard简单使用
  • 原文地址:https://www.cnblogs.com/syd192/p/4409934.html
Copyright © 2011-2022 走看看