好久沒有寫關於資料結構的筆記了,快校招了,得補補,面試或許有用的。
下面講希爾排序,作為簡單插入排序的改進:
先講下思路: 挺簡單的。 簡單插入排序,就是後面的數來的從後面開始比較,只要《前面的數,就將前面的數往後移動一位,直到不能移動為止,則是要插入的地方。
****為何出了希爾排序呢,上面的思路挺容易忽略乙個簡單的事實,那就是我們都是從後面的數和前面的乙個數開始比較,這裡步長是1. 如果不長不是1 呢。那就是我們的希爾排序,希爾排序就是假定乙個步長,然後呼叫簡單插入排序,然後這個步長慢慢減小,直到為1. 那麼就ok了。 ******
#include#includevoid print(int a, int n )
a[j] = x; //插入到正確位置
} } print(a, n);
} /**
* 先按增量d(n/2,n為要排序數的個數進行希爾排序
* */
void shellsort(int a, int n)
} int main();
//shellinsertsort(a,8,1); //直接插入排序
shellsort(a,sizeof(a)/sizeof(a[0]) ); //希爾插入排序
return 0;
}
資料結構實驗之排序六 希爾排序
time limit 1000ms memory limit 65536k 有疑問?點這裡 我們已經學習了各種排序方法,知道在不同的情況下要選擇不同的排序演算法,以期達到最好的排序效率 對於待排序資料來說,若資料基本有序且記錄較少時,直接插入排序的效率是非常好的,希爾排序就是針對一組基本有序的少量資...
資料結構實驗之排序六 希爾排序
我們已經學習了各種排序方法,知道在不同的情況下要選擇不同的排序演算法,以期達到最好的排序效率 對於待排序資料來說,若資料基本有序且記錄較少時,直接插入排序的效率是非常好的,希爾排序就是針對一組基本有序的少量資料記錄進行排序的高效演算法。你的任務是對於給定的資料進行希爾排序,其中增量dk n 2 k ...
資料結構實驗之排序六 希爾排序
我們已經學習了各種排序方法,知道在不同的情況下要選擇不同的排序演算法,以期達到最好的排序效率 對於待排序資料來說,若資料基本有序且記錄較少時,直接插入排序的效率是非常好的,希爾排序就是針對一組基本有序的少量資料記錄進行排序的高效演算法。你的任務是對於給定的資料進行希爾排序,其中增量dk n 2 k ...