八大排序學習之二直接插入排序

2021-07-24 03:53:19 字數 1372 閱讀 6525

直接排序是我常見的一種排序方法,是一種穩定的排序,時間複雜度平均為o(n),

我們平常生活中也經常無意的用到,比如說打牌的時候經常要排序。

首先想想我們打牌的時候是怎麼整理我們的牌的,一開始的時候有可能是完全無序的也有可能是一部分有序的,但是我們就把無序的牌直接插到有序的牌中,並且把比插入的牌大的牌往後移。

把問題抽象成程式中的話,意思為有著n個元素的陣列a[n],其中前面k項為有序的,後面的n-k項是無序的,我們要做的是把後面的n-k項插入到前面的k項中,形成乙個大的有序陣列。

舉個栗子:

int a[3]=;
這個陣列我們要把它排序,我們來模擬一邊這個直接插入排序的詳細過程。

外迴圈第一步,從第乙個開始,因為我們是用後面的跟前面的比較,因為a[0]=2,第零個的前面的沒有資料了。

當前的我們觀察的是a[1]=5,把5存起來,明顯比a[0]大,所以不做任何操作。

第二步,我們觀察的是a[2]=3,把3存起來,跟前面的a[1]=5比較,比a[2]=3大

內迴圈往前比較,現在比較的是a[1]=5,跟存好的3比較,比3大,往後移a[2]=a[1]

現在的陣列是;

繼續往前,a[0]=2,跟存好的3比較,比3小,找到插入的位置,把存好的3放入a[0]之後。

得出陣列為;

為什麼要兩個迴圈呢?因為遍歷的時候,除了往後移動當前的第乙個無序的,還要跟之前排好序的進行遍歷比較找到適合的插入的位置。

現在貼上**:

void mysort(int arr,int n)

arr[j+1]=temp; //插入到合適的位置 }

}

下面插入完整的**:

#include "stdafx.h"

#include #include #define numsize 20000

void mysort(int arr,int n)

arr[j+1]=temp; //插入到合適的位置 }

}int main(int argc, char* argv)

{ float nstart=clock();

srand((unsigned)time(null));

//產生2萬個隨機數

下面是20000個資料的排序情況

八大排序 直接插入排序

直接插入排序 straight insertion sort 的基本操作是將乙個元素插入到序列已經有序的那一部分中去,從而使序列中有序的部分逐漸擴大,直到整個序列有序。博主認為直接插入排序過程比較容易理解,所以不作過多贅述,直接上 include void main int length sizeo...

八大排序 插入排序 直接插入排序

基本思想 將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。直接插入排序示例 如果碰見乙個和插入元素相等的,那麼插入元素把想插入的...

八大排序之插入排序(直接插入排序 希爾排序)

插入排序 英語 insertion sort 是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序可以分為直接插入排序和希爾排序。直接插入排序 相信大家都玩過撲克牌 即使沒玩過,也聽說過 這就是插入,模擬到我們排序中,就...