從插入排序到希爾排序

2022-09-06 15:51:12 字數 1305 閱讀 8810

本博文主要是我以前寫過的一些演算法程式,裡面主要從簡單的插入排序到希爾排序說明。

#include

#include

void shellsort(int *arr,int len); //在插入排序基礎上進行修達到希爾排序

void

shellsortreal(int *arr,int len); //簡化的希爾排序

void insertsort(int *arr,int len);

//原生態插入排序

int main();

//shellsort(arr,5);

shellsortreal(arr,5);

for(int

i=0;i<5;

i++)

std::coutlen,陣列大小

void shellsort(int *arr,int len)

if(k!=j-gap)}}

}}函式功能與原理:

這個函式的作用是相對於上面那個函式的簡單,上面那個函式寫法是正確的,但是**量太大,不方

便理解。因此我們應該簡化這些**

希爾排序的原理:希爾排序的原理是在插入排序原理上進行改進,以前插入排序是步長為1,依次當

前的元素插入到前面己經排好序的陣列中,相當於是有乙個己經排好序的陣列,陣列長度比實際的元

素數目大1,有乙個新的元素要插入到陣列中,因此我們只有從後往前插,假如是按從小到大排序,則

將當前元素與最後的元素比較,如果當前元素比最後面的元素小,則將最後的元素往後移一下,然後

再用當前元素與倒數第二個元素比較,如果還是比當前元素大,則將當前元素後移,實際上是正好移

到原理最後那個元素上了,注意:我說的當前元素是待插入元素。

那麼希爾排序是分多次的不同步長的排序,相當於是將原來的陣列斥分成許多子陣列,這些子陣列進

行插入排序再合併,並不斷減少步長。至到步長為1.

入口引數:

arr,陣列

len,陣列大小

void shellsortreal(int *arr,int len)

if(j!=i-gap)}}

}函式功能:插入排序作用,原理是不停地從後面的資料中選擇資料插入到前面己排好的資料列中,

因為前面的己經是排好的,因此只要在將後面選擇的選據在前面的序列中找到自己的位置就可以了

將手上的資料從己排好序的資料後面開始,將這些資料往後挪,一直找到合適自己的位置就搞定了。

入口引數:arr,陣列

len,陣列大小

void insertsort(int *arr,int len)

if(j!=i-1)}}

排序 從直接插入排序到希爾排序

直接插入排序 有n個資料,取第2個數與第1個數比較,使這2個數有序 取第3個數,與前2個數比較,使這3個數有序 取第n資料,與前n 1個數比較,使這n個數有序。摘要 採用插入排序,對進行排序 完成日期 2012 7 13 11 04 版本 1.1v include void printlist in...

插入排序 希爾插入排序

本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...

插入排序 希爾排序

我們知道當乙個序列基本有序時,直接插入會變得很高效。因為此時只需少量的移動元素,操作集中在元素的比較上。基於這種想法,我們就試圖把乙個序列在進行直接插入前調整得盡量有序。這就是希爾排序 shell sort 的核心思路。shell只是演算法發明者的名字,無特殊含義 那到底該怎麼做呢?希爾排序一反以前...