1. 程式人生 > >直接插入排序演算法

直接插入排序演算法

直接插入排序

(Straight Insertion sort)

基本思想:把陣列中待排序的n個元素看成一個有序表和無序表,開始時有序表只有一個元素,而元素表中包含有n-1個元素。排序過程中,每次取出無序表中第一個元素,將它插入到有序表的適當位置上,使之成為一個新的有序表,這樣經過n-1次的插入後,無序表變成為空表,而有序表包含有n個元素,至此排序完畢。

存在的問題:如何將一個記錄數插入到當前的有序區,並使插入後該區間的記錄按關鍵字仍然有序。

第一種略

第二種方法:從有序表的表尾開始將記錄查詢和移動交替地進行。

具體做法:將待插入的記錄關鍵字key從右到左依次與有序表中記錄關鍵字進行比較。

假如陣列R有8個待排序的記錄,它們的關鍵字分別是

(56,26,47,10,60,40,20,30)

趟數:   R[0]

0    i=1  (56)    [56]  26 47 10 60 40 20 30

1    i=2  (26)    [ 26   56]  47 10 60 40 20 30

2    i=3  (47)    [ 26   47  56 ] 12 65 41 20 30

3   i=3  (12)    [ 12 26 47 56 ]65 41 20 30

4   i=3  (65)    [ 12 26 47 56 65 ]41 20 30

5   i=3  (41)    [ 12 26 41 47 56 65] 20

30

6   i=3  (20)    [ 12 20 26 41 47  56 65] 30

7   i=3  (36)    [ 12 20 26 30 41 47 56 65 ]

排序演算法:

Insert_sort(r)          \\直接插入排序

Rectype r[];{           

Int i,j,n=NUM;     \\NUM為實際輸入記錄數

For(i=1;i<n;i++){               

r[0]=r[i];

j=i-1;

while(r[0].key<r[j].key)        \\查詢r[i]合適的插入位置

r[j+1]=r[j--];                   \\記錄大於r[i].key後移

r[j+1]=r[0];                \\r[i]插入到有序表的合適位置

}

}

**注意r[j--],先賦值在進行自減

仔細觀察就會發現實際是從r[1]開始的,r[0]起一個監視作用,當資料過大過多的時候,會使測試的時間減少近一半。

#include"stdio.h"
#define N 9
int main(){
	int a[N]={0,56,26,47,10,60,40,20,30};
	int i,j;
	for(i=1;i<N;i++){
		a[0]=a[i];
		j=i-1;
		while(a[0]<a[j])
		   a[j+1]=a[j--];
		a[j+1]=a[0];
	}
	a[0]=0;
	for(int b=0;b<N;b++)
	  printf("%3d",a[b]);
} 

相關推薦

淺談直接插入排序演算法思想以及時間複雜度分析

研究意義 直接插入排序是最基本的一種排序演算法,其思想簡單,容易掌握,對後期的學習也有一定的幫助。 必備知識(之後不再敘述) 排序:將一組雜亂無章的資料排列成一個按關鍵字有序的序列。 穩定性:關鍵值相

直接插入排序演算法詳解

直接插入排序演算法到底是什麼個情況呢? 我們看到“直接”2個字,說明這個演算法應該是先得到我們插入的位置,然後就直接插入進去沒有什麼比較過程就插入進去了。 那麼直接插入排序演算法的本質是什麼呢,比如我們有一個有序陣列 1 2 3 4 5 6 8 9 我

直接插入排序演算法

直接插入排序 (Straight Insertion sort) 基本思想:把陣列中待排序的n個元素看成一個有序表和無序表,開始時有序表只有一個元素,而元素表中包含有n-1個元素。排序過程中,每次取出無序表中第一個元素,將它插入到有序表的適當位置上,使之成為一個新的有序表

C ++直接插入排序演算法

直接插入排序的原理:將一個待排序的元素,通過與前面已經排好序的有序序列所有元素進行比較後,再插入到有序序列中。 #include <iostream> #include <stdlib.h> using namespace std; /******

Linux下c直接插入排序演算法

 主函式  1 //排序主函式   2 #include <stdio.h>   3 void main()   4 {   5 int ss[10]={5,0,6,3,1,8,4,9,7,2};   6 int i;   7 for(i=0;i<10;i

直接插入排序演算法-設定哨兵版

/*直接插入排序演算法的時間複雜度為O(n^2), 它是穩定的排序演算法*/ #include <stdio.h> int sum[1000]; int main() { int n,i,j; scanf("%d",&n); for(i=1;i&l

排序演算法--插入排序直接插入排序

直接插入排序的核心思想是把一個記錄插入一個有序序列中,每插入一個記錄就得到一個新的有序序列,直到所有記錄都插入成功,得到有序序列。 每次插入記錄時的有序序列如何得到,關鍵在第一次,第一次要插入的記錄時序列的第二個值,有序序列只有一個值,就是第一個記錄。 程式碼: #in

小甲魚 排序演算法 直接插入排序

小甲魚 排序演算法 直接插入排序   在這之間排序演算法的時間複雜度是O(n2),希爾排序突破了O(n*logn)   直接插入排序演算法(Straight Insertion Sort)的基本操作是將一個記錄插入到已經排好序的有序表中,從而得到一個新的、記錄數增

排序演算法c語言描述---直接插入排序

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

演算法 直接插入排序小述

一、概述 本節主要簡單介紹一下直接插入排序演算法,直接插入排序(Straight Insertion Sort)是一種最簡單的排序方法,其基本操作是將一條記錄插入到已排好的有序表中,從而得到一個新的、記錄數量增1的有序表。摘自百度百科。 二、分析 假如現在有一個具有n+1個元

排序演算法:選擇排序直接插入排序,氣泡排序

package com.Algorithm.Search_Sort; import java.util.Arrays; public class Sort { public int array[] = {99,34,76,92,34,17,77,41,40,36,6}; //

排序演算法(一):直接插入排序

1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好的有序表中,從而得到一個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是一個有序的子序列,然後從第2個記錄逐個進行插入,直至整個序列有序為止。 要點:設立哨兵,作

【Java】 大話資料結構(18) 排序演算法(5) (直接插入排序) 資料結構與演算法合集 資料結構與演算法合集

本文根據《大話資料結構》一書,實現了Java版的直接插入排序。 更多:資料結構與演算法合集 基本概念   直接插入排序思路:類似撲克牌的排序過程,從左到右依次遍歷,如果遇到一個數小於前一個數,則將該數插入到左邊所有比自己大的數之前,也就是說,將該數前面的所有更大的數字都後移一位,空出來的位置放入該數。

資料結構與演算法-直接插入排序

概要 基本概念 java程式碼實現 圖示執行過程 時間複雜度分析 基本概念 直接插入排序(Straight Insertion Sort)的基本操作是將一個記錄插入到

排序演算法(3)--直接插入排序InsertSort

介紹: 插入排序的工作原理是,對於每個未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。 越有序越快 步驟: 1.從第一個元素開始,該元素可以認為已經被排序 2.取出下一個元素,在已經排序的元素序列中從後向前掃描 3.如果被掃描的元素(已排序)大於新元

排序演算法三:直接插入排序

要點 直接插入排序是一種最簡單的插入排序。 插入排序:每一趟將一個待排序的記錄,按照其關鍵字的大小插入到有序佇列的合適位置裡,知道全部插入完成。  在講解直接插入排序之前,先讓我們腦補一下我們打牌的過程。 先拿一張5在手裡, 再摸到一張4,比5小,插到5前面, 摸

基礎算法系列之排序演算法-3. 直接插入排序 並用其解決HDU 1106 排序

      我們之前已經學習了氣泡排序和二分查詢兩種基本演算法,本篇文章我們將一起學習下一個基礎演算法——直接插入排序演算法。  直接插入排序      直接插入排序,從這個名字來看,是不是讓你想到了什麼場景?!對了,就是打撲克牌的場景,我們每摸一張牌,是不是按照一定的次

排序演算法--插入排序--直接插入排序

//插入排序--直接插入排序 void print_insert_sort_list(int list[] , int count) {     for(int i = 0 ; i < count ; i++)     {         printf("%5d" ,

Mint演算法初學—直接插入排序

直接插入排序 程式碼 package com.sort; public class InsertSort { public static void main(String[] args) { System.out.println("-

排序演算法3——圖解直接插入排序以及折半(二分)插入排序及其實現

排序演算法1——圖解氣泡排序及其實現(三種方法,基於模板及函式指標) 排序演算法2——圖解簡單選擇排序及其實現 排序演算法3——圖解直接插入排序以及折半(二分)插入排序及其實現 排序演算法4——圖解希爾排序及其實現 排序演算法5——圖解堆排序及其實現 排序演算法6——圖解歸併排序及其遞迴與非