琢磨算之插入排序

插入排序算法是一个对少量元素进行排序的有效算法。插入排序的工作原理与打牌时整理手中的牌的做法类似,开始摸牌时,我们的左手是空的,接着一次摸起一张牌,并将它插入到左手的正确位置。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左进行比较,无论什么时候手中的牌都是排序好的。

public void insertSort(int a[]){

  int length=a.length; //数组长度

  int j;     //当前值的位置

  int i;     //指向j前的位置

  int key;    //当前要进行插入排序的值

  //从数组的第二个位置开始遍历值

  for(j=1;j<length;j++){

   key=a[j];

   i=j-1;

   //a[i]比当前值大时,a[i]后移一位,空出i的位置,好让下一次循环的值后移

   while(i>=0 && a[i]>key){

    a[i+1]=a[i]; //将a[i]值后移

    i--;      //i前移

   }//跳出循环(找到要插入的中间位置或已遍历到0下标)

   a[i+1]=key;    //将当前值插入

  }

 }

时间: 2024-10-13 03:33:05

琢磨算之插入排序的相关文章

算法(二)初等排序前篇[插入和冒泡排序]

相关文章 算法(一)时间复杂度 前言 排序是算法的基础,排序有很多种方法,有些方法实现起来很简单,但是效率较差,我们可以将这些排序的方法称之为初等排序.这篇文章我们就来学习初等排序中的插入排序和冒泡排序. 1.插入排序 插入排序比较容易想到,思路与打扑克时排列牌的顺序是类似的.比如我们左手拿牌,然后用右手将牌从左到右,从小到大来排序,这就需要我们把需要进行排列的牌抽出来放到合适的位置,并且不断的重复,直到牌的顺序排好,这个过程就可以理解为插入排序. 图解插入排序 插入排序过程中会将需要排序的数组

常见排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)

这篇博客主要实现一些常见的排序算法.例如: //冒泡排序 //选择排序 //简单插入排序 //折半插入排序 //希尔排序 //归并排序 //双向的快速排序 //单向的快速排序 //堆排序 对于各个算法的实现原理,这里不再多说了,代码中注释较多,结合注释应该都能理解算法的原理,读者也可自己google一下.另外,注释中有很多点,比如边界条件.应用场景等已经用 * 标记,* 越多,越应该多注意. 下面是实现: //冒泡排序 void BubbleSort(int *arr, int n) { if(

Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。

Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素).在第一部分排序完成后,再将这

排序算法一:插入排序(Insertion sort)

最近从网易公开课在看麻省理工学院的公开课<算法导论>,感觉还不错,接下来几篇文章所示学习日记了,不准备对算法细节做过多描述,感兴趣的可以自己去看. 文章分几篇讲经典排序算法,直接上代码,根据结果对算法性能有个直观了解.本篇先说插入排序(insertion sort). (一)算法实现 1 protected void sort(int[] toSort) { 2 if (toSort.length <= 1) { 3 return; 4 } 5 for (int i = 1; i <

排序算法一:直接插入排序

一.算法特性 <一>基本思想: 1.就是将某个元素插入到正确的位置: 2.基本过程:做这样的前提,插入第i个元素时,前i-1个元素都是有序的.因此将A[i]插入到这个有序队列的合适位置,保证:A[n-1] < A[i] <A[n+1];此时就添加进了新元素,并且保证了整个数组是有序的. 3.时间复杂度:T(n) = O(n^2); 二.代码 class InsertSort{ public static void inserSort(int[] A){ int len = A.le

八大排序算法原理以及Java实现(直接插入排序)

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 1.插入排序-直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到

插入排序与归并排序

前言: 排序算法应该算是算法入门级的东西了,这里重新学习算法,先暂时归纳下个人对两种算法的理解. 插入排序: 插入排序可以对应到现实生活中的排队去停车场停车的场景.假设某家饭店的饭菜十分好吃(流口水),导致来这里吃饭的人特别多,后面来吃饭准备停车的车排起了长队.每次只允许一辆车过去找位置,找到位置之后才允许下一辆车进入,依此类推,直到所有的车都停好.转换成专业的数学模型就是:现有一个无序数组 A[n],要想对其进行排序.我们先从一个数开始考虑,A0肯定是排好序的.现在假设有A1,那么这时候应该将

探讨排序算法的实现

排序算法是我们工作中使用最普遍的算法,常见的语言库中基本都会有排序算法的实现,比如c标准库的qsort,stl的sort函数等.本文首先介绍直接插入排序,归并排序,堆排序,快速排序和基数排序等比较排序算法,然后介绍计数排序,基数排序等具有线性时间的排序算法.本文主要讨论算法的实现方法,并不会过多介绍基本理论. 评价一个排序算法优劣适用与否,一般需要从三个方面来分析 时间复杂度.用比较操作和移动操作数的最高次项表示,由于在实际应用中最在乎的是运行时间的上限,所以一般取输入最坏情况的下的运行时间作为

排序-InsertionSort 插入排序

插入排序 の implementation 插入排序就像打赌的时候,比如双扣.抽牌的时候,一次拿一张牌,这张牌和之前的牌一张张比较.选择把这张牌插入什么位置,排好顺序的位置后打牌更顺.要不然得一个一个找到时麻烦.也不利于打牌的大局观.看下图 假设第一次抽到梅花7, 不用排序.因为只有一张 接着抽到梅花10 .因为10比7大,所以不用排序. 再接着抽卡.发现抽到了梅花5 .这个时候不要犹豫,2点真的不算大的.果断弃牌 接着我们拿 5 和 10 比较. 5 小于 10 所以交换位置. 拿5再和7比.