插入排序法

最差时间复杂度 n*(n-1)/2,挺快的

void cal(int num[],int n)
{
   int i,j;
   for(i=1;i<n;i++)
   {
      int key=num[i];
      j=i-1;
      while(j>=0&&num[j]>key)
      {
         num[j+1]=num[j--];
      }
      num[j+1]=key;
   }
}

时间: 2024-10-05 17:29:08

插入排序法的相关文章

PHP--冒泡、选择、插入排序法

使用php来实现常用三种排序方法: 1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: xxx 5 * Date: 2016/10/12 6 * Time: 21:38 7 */ 8 // 冒泡排序法 9 function maopao_sort(&$arr){ 10 // 外循环 控制趟数 只需要count($arr)-1趟就可以完成排序 11 for($i=0;$i<count($arr)-1;$i++){ 12 // 内循环控制每一趟

插入排序法---题目

题目内容: 實作插入排序法讓一個序列的數字遞增,並輸出數字總共交換了幾次. 比如說一個序列1 3 7 9 2,前四個數字都已經排好了,這時候第五個數字2進來,他必須跟9,7,3交換使得序列變成1 2 3 7 9.這個數字2的交換次數就是3次. 输入格式: 輸入第一行為一個數字T,代表測試資料的筆數.接下來有T筆測資,每筆測資第一行為一個正整數N,表示這筆測資有N個數字.每筆測資的第二行會有N個數字,每個數字間以空格隔開. 數字範圍: 0 < N <= 100 0 <= 序列內的數字 &l

实例365(15)--------------经典排序----插入排序法

前言:此代码设计的比较简洁,可能不太容易理解,插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 一:截图 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.

排序之直接插入排序法

最近看数据结构时看到直接插入排序法,其基本思想是:将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表 下面是代码实现与测试 1 #include <iostream> 2 using namespace std; 3 void InsertSort(int *q,int L) 4 { 5 int i,j,temp; 6 for(i=1;i<L;i++) 7 { 8 temp=q[i]; 9 for(j=i-1;j>=0&&temp<q[

算法大神之路----排序(插入排序法)

插入排序法 所谓插入排序法乃是将一个数目插入该占据的位置. 输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕. 代码示例: import java.util.Random; /** * 算法大神之路----排序(插入排序法) */ public class Study03 { public static void main(String[] args) { //新建一个数组 int[] arr = n

php 四种基础算法 ---- 插入排序法

3.插入排序法 插入排序法思路:将要排序的元素插入到已经 假定排序号的数组的指定位置. 代码: function insert_sort($arr) {    //区分 哪部分是已经排序好的    //哪部分是没有排序的    //找到其中一个需要排序的元素    //这个元素 就是从第二个元素开始,到最后一个元素都是这个需要排序的元素    //利用循环就可以标志出来    //i循环控制 每次需要插入的元素,一旦需要插入的元素控制好了,    //间接已经将数组分成了2部分,下标小于当前的(

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式排序法 冒泡法 基本思想: 冒泡排序法 案例: 1234567891011121314151617181920212223242526 //简单的$arr=array(0,5,-1); //现在我们把函数毛片封装成函数,利用以后使用//数组默认传递的是值,不是地址,&是地址符function bubb

直接插入排序法原理及其js实现

直接插入排序法就像我们打扑克牌时整理牌面一样,先让我们脑补一下我们打牌的过程. 首先摸了一张6, 接着摸到一张4,比6小,插到6的前面: 又摸到一张7,比6大,插到6的后面: 又摸到一张5,比6小,比4大,插到4和6中间: .... 以上的过程,其实就是典型的直接插入排序,每次将一个新数据插入到有序队列中的合适位置里. 步骤: 1.首先将数组第1个数看成是一个有序序列. 2.将数组的第2个数按照关键字大小插入到这个有序序列中,插入后得到了一包含两个数的有序序列. 3.接下来再重复上面的步骤将第3

java 数组排序 插入排序法

插入排序法思想:将n个数字分为前面几个是有序数字集合,后面几个为无序集合.当然尚未排序之前,可以将n0 看为有序数集合,N1-Nn-1 看为等待排序的无序集合.从N1开始将无序数一个一个插入到有序数集合中,使之再次成为有序数集合,当第Nn-1 个数字插入有序数集合中后.整个n数字集合便成为有序集合. 示例:2,1,8,9,6,3,4,7,5 第一步排序后结果:1,2,8,9,6,3,4,7,5 第二步排序后结果:1,2,8,9,6,3,4,7,5 第三步排序后结果:1,2,8,9,6,3,4,7

算法排序----插入排序法

接下来我来讲述一下插入排序法. 首先来解释一下插入排序法的原理,它的原理是每插入一个数都要将它和之前的已经完成排序的序列进行重新排序,也就是要找到新插入的数对应原序列中的位置.那么也就是说,每次插入一个数都要对原来排序好的那部分序列进行重新的排序,时间复杂度同样为O(n2). 这种算法是稳定的排序方法. 直接插入排序算法分析 根据代码我们来解释一下直接插入排序的核心 例如,我们要对5,3,4,6,2这几个数进行排序 a[] 0 1 2 3 4 值 5 3 4 6 2 当这个数组进入函数后,下标首