插入排序-最基本的版本

插入排序的思想:
假设现在有一堆数据,需要排序,我们随便选取一个数据作为第一个元素。然后从剩下的数据里面选一个(称为key)和之前选的第一个元素做比较,按照要求(升序还是降序),把key和第一个元素排好序。这样,这2个元素就是排好序的了。现在从剩下的那一堆数据里面选一个作为新的key,再和之前已经排好序的元素,按照要求放到到合适的位置上。这样,这3个元素就是排好序的了。照此循环,把所有数据就排好序了。

参考代码:

 1 //arr:待排序的数组,length:待排序数组的长度
 2 void InsertSort(int arr[],int length)
 3 {
 4     int i,j;
 5     int key;    //待插入的数
 6     for(i = 1; i < length; ++i)
 7     {
 8         key = arr[i];
 9         j = i - 1;
10
11         // 找到合适的位置,插入key
12         // >:升序 <:降序
13         while(  (j >= 0)  && (arr[j] > key)   )
14         {
15             arr[j+1] = arr[j];
16             --j;
17         }
18         arr[j+1] = key;
19
20     }
21 }
时间: 2024-09-17 10:44:07

插入排序-最基本的版本的相关文章

直接插入排序算法(Javascript版本)

将n个元素的数列分为已有序和无序两个部分. 数列:{a1,a2,a3,a4,…,an} 将该数列的第一元素视为有序数列,后面都视为无序数列: {{a1},{a2,a3,a4,…,an}} 将无序数列中的元素插入到有序数列的对应位置,插入前通过比大小的方式找到其在有序数列中的对应位置. 代码: 以下代码在nodejs环境中执行通过. function sort(elements){ //假设第0个元素是一个有序的数列,第1个以后的是无序的序列, //所以从第1个元素开始将无序数列的元素插入到有序数

插入排序2.0

好久没复习以前写的数据结构了,今天看了一段以前写的插入排序. 插入排序原理:通俗讲,和打扑克牌整理牌是一个道理,从一堆混乱牌中,一张一张拿,拿一张后与前面排好的牌一个个比较,插入合适的位置. 时间复杂度:O(n^2) /*插入排序2.0 **此版本将创建数组函数删除, **创建数组与插入排序编排到 **同一个函数里. */ #include "stdafx.h" #include <stdio.h> #define M 1000 void Insert_sorting(in

【算法导论】归并排序

递归与分治 许多有用的算法在结构上是递归的:为了解决一个给定的问题,算法一次或多次递归地调用其自身以解决紧密相关的若干子问题.这些算法典型地遵循分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解. 分治模式在每层递归时都有三个步骤: 分解原问题为若干子问题,这些子问题是原问题的规模较小的实例. 解决这些子问题,递归地求解各子问题.然而,若子问题的规模足够小,则直接求解. 合并这些子问题的解成原问题的解. 归并排序 归并排

STL源码剖析——STL算法stl_algo.h

前言 在前面的博文中剖析了STL的数值算法.基本算法和set集合算法,本文剖析STL其他的算法,例如排序算法.合并算法.查找算法等等.在剖析的时候,会针对函数给出一些例子说明函数的使用.源码出自SGI STL中的<stl_algo.h>文件.注:本文的源码非常多,可能后续博文会对这些算法进行归类分析. STL算法剖析 #ifndef __SGI_STL_INTERNAL_ALGO_H #define __SGI_STL_INTERNAL_ALGO_H #include <stl_heap

STL源码剖析——STL算法之sort排序算法

前言 由于在前文的<STL算法剖析>中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解.本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的快速排序,而是交叉利用各种排序:堆排序.插入排序和快速排序:这样做的目的是提高效率,针对数据量比较大的采用快速排序,数据量比较小的可以采用堆排序或插入排序.注意:STL的sort排序算法的迭代器必须是随机访问迭代器. sort排序算法剖析 // Return a random n

插入排序和冒泡排序(Swift版本)

插入排序(只记录代码不作详细分析) 插入排序将输入的元素一个个插入到已排序的队列里,对比是由后往前 代码: func insertSort<Elem: Comparable>(_ arr: inout [Elem]) {     for i in 1...arr.count-1 {         let tmp = arr[i]                 for j in (0...i-1).reversed() {             if (j > 0 &&

《算法导论》习题2.3-4 插入排序的递归版本

伪代码: RECURSIVE-INSERT-SORT (A, n) if n>1 RECURSIVE-INSERT-SORT (A ,n-1) InsertLastNumber (A,n) InsertLastNumber (A,n) temp = A[n] i=n-1 while i>0 && A[i]>temp A[i+1] = A[i] i -=1 A[i+1]=temp Java实现: public class RecursiveInsertSort { publ

插入排序 php版本

function InsertSort(array $container){ $count = count($container); for ($i = 1; $i < $count; $i++){ $temp = $container[$i]; $j = $i - 1; // Init while ($container[$j] > $temp){ $container[$j+1] = $container[$j]; $container[$j] = $temp; $j--; print_r

冒泡、选择、插入排序 不带对数器版本

1 package com.aixuexi.contact; 2 3 public class BubbleSort { 4 public static void main(String[] args) { 5 int arr[] = new int[] {985,2,6}; 6 //冒泡 O(N*N) 7 for(int end = arr.length-1; end > 0; end--) { 8 for(int i = 0; i < end; i++) { 9 if(arr[i] >