zoukankan      html  css  js  c++  java
  • 排序算法——直接插入排序

      所谓的排序就是给定一个序列,然后整理该序列,使其元素呈现递增(或者递减)的状态排列。

      经典的排序算法包括:直接插入排序、二分插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序等。

      今天来学习最简单的排序算法——直接插入排序

      我们可以将给定的一个序列分为两部分,一部分是有序区间,另一部分是无序区间。例如,给定的序列有n个元素,我们用区间[0,1,2,...,n-1]来

    表示这个序列,其中0至n-1是元素的下标。那么,在未排序前,我们可以将其分为两部分,[0]和[1,2,...,n-1],区间[0]只有第一个元素,显然它是有序的,

    区间[1,2,...,n-1]是无序的,是需要我们进行排序的元素。直接插入排序的思想就是从无序区间中选取一个元素,插入到有序区间中,在排序的过程中,需要不断

    地将待插入的元素与有序区间的元素进行比较,找到插入位置,然后移动元素,腾出位置,让带插入的元素插入进去。经过一趟排序后,有序区间的

    元素增加,无序区间的元素减少,这样经过n-1趟排序后,整个区间都是有序的。

      代码实现如下:

     1 #include <stdlib.h>
     2 #include <stdio.h>
     3 
     4 void InsertSort(int A[], int n)
     5 {   
     6     int i, j, temp;
     7     for(i = 1; i < n; i++)                      // 待排序前,无序区间为[1,n-1]
     8     {
     9         temp = A[i];                            // 局部变量保存待插入的元素
    10         for(j = i - 1; j >= 0; j--)             // 有序区间从后向前取元素
    11         {
    12             if(A[j] > temp)
    13                 A[j+1] = A[j];                  // 向后移动元素
    14             else
    15                 break;                          // 找到插入位置,跳出内循环
    16         }
    17         A[j+1] = temp;                          // 插入元素
    18     }
    19 }

      直接插入排序的时间复杂度:O(n2),空间复杂度为:O(1)

      

  • 相关阅读:
    解决硬盘分区无法挂载的问题
    Java EE学习记录(一)
    Netbeans 8.2启动参数含义及配置
    汉化CodeBlock
    linux解决无法打开资源管理器
    netbean下搭建mariadb数据库
    mariadb中执行数据库脚本的方法
    修复受损的linux引导
    修复无法启动的mariadb
    no update
  • 原文地址:https://www.cnblogs.com/greedyco/p/7134572.html
Copyright © 2011-2022 走看看