C語(yǔ)言基本排序算法之shell排序?qū)嵗?/h1>
更新時(shí)間:2017年09月27日 10:35:14 作者:liyuxia713
這篇文章主要介紹了C語(yǔ)言基本排序算法之shell排序,結(jié)合具體實(shí)例形式分析了基于C語(yǔ)言的shell排序原理與實(shí)現(xiàn)技巧,代碼注釋中備有詳細(xì)的說(shuō)明,需要的朋友可以參考下
本文實(shí)例講述了C語(yǔ)言基本排序算法之shell排序。分享給大家供大家參考,具體如下:
shell排序是對(duì)直接插入方法的改進(jìn)方法.
/*-------------------------------------------------------------------------------------
Shell_sort.h
shell排序是對(duì)直接插入方法的改進(jìn),它并不是對(duì)相鄰元素進(jìn)行比較,而是對(duì)一定間隔的元素比較.
選擇增量序列的幾種方法:(為方便,本例采用第一種增量序列)
1. h[1]=size, h[k] = h[k-1]/2.
最壞運(yùn)行時(shí)間為O(N^2).
最壞情形:數(shù)組長(zhǎng)度為2^n,數(shù)組的偶數(shù)位置上同是一個(gè)數(shù),奇數(shù)位置上也同是一個(gè)數(shù),
且比偶數(shù)位置的小。此時(shí)到最后一次遍歷前shell排序?qū)嶋H上什么也沒(méi)做。
最后一次遍歷相當(dāng)于直接插入方法。
2. Hibbard增量序列: h = 1,3,7,,2^k-1
這個(gè)的區(qū)別于上的主要的特點(diǎn)是相鄰增量沒(méi)有公因子
最壞運(yùn)行時(shí)間為O(n^{1.5});
3. Sedgewick增量序列:{1,5,19,41,109,}
-------------------------------------------------------------------------------------*/
#ifndef SHELL_SORT_H
#define SHELL_SORT_H
#include "typedef.h"
void Shell_sort(T* a, int n)
{
for(int gap = n; gap > 0; gap = gap/2)
{
for(int i = 0; i != n; ++i)
{
T temp = a[i];
int j = i - gap;
for( ; j >= 0 && a[j] > temp; j = j-gap)
a[j+gap] = a[j];
a[j+gap] = temp;
}
}
}
#endif
希望本文所述對(duì)大家C語(yǔ)言程序設(shè)計(jì)有所幫助。
相關(guān)文章
-
Objective-C中常用的結(jié)構(gòu)體NSRange,NSPoint,NSSize(CGSize),NSRect實(shí)例分析
這篇文章主要介紹了Objective-C中常用的結(jié)構(gòu)體NSRange,NSPoint,NSSize(CGSize),NSRect實(shí)例分析,有助于更加直觀的理解Object-C常用的結(jié)構(gòu)體,需要的朋友可以參考下 2014-07-07
-
C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式
這篇文章主要介紹了C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教 2022-11-11
-
C++基于隨機(jī)數(shù)實(shí)現(xiàn)福彩雙色球的方法示例
這篇文章主要介紹了C++基于隨機(jī)數(shù)實(shí)現(xiàn)福彩雙色球的方法,結(jié)合完整實(shí)例形式分析了C++隨機(jī)數(shù)算法的實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下 2017-06-06
-
C++實(shí)現(xiàn)四則混合運(yùn)算計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)四則混合運(yùn)算計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2020-11-11
-
C語(yǔ)言線性表順序存儲(chǔ)結(jié)構(gòu)實(shí)例詳解
這篇文章主要介紹了C語(yǔ)言線性表順序存儲(chǔ)結(jié)構(gòu)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下 2017-06-06
最新評(píng)論
本文實(shí)例講述了C語(yǔ)言基本排序算法之shell排序。分享給大家供大家參考,具體如下:
shell排序是對(duì)直接插入方法的改進(jìn)方法.
/*-------------------------------------------------------------------------------------
Shell_sort.h
shell排序是對(duì)直接插入方法的改進(jìn),它并不是對(duì)相鄰元素進(jìn)行比較,而是對(duì)一定間隔的元素比較.
選擇增量序列的幾種方法:(為方便,本例采用第一種增量序列)
1. h[1]=size, h[k] = h[k-1]/2.
最壞運(yùn)行時(shí)間為O(N^2).
最壞情形:數(shù)組長(zhǎng)度為2^n,數(shù)組的偶數(shù)位置上同是一個(gè)數(shù),奇數(shù)位置上也同是一個(gè)數(shù),
且比偶數(shù)位置的小。此時(shí)到最后一次遍歷前shell排序?qū)嶋H上什么也沒(méi)做。
最后一次遍歷相當(dāng)于直接插入方法。
2. Hibbard增量序列: h = 1,3,7,,2^k-1
這個(gè)的區(qū)別于上的主要的特點(diǎn)是相鄰增量沒(méi)有公因子
最壞運(yùn)行時(shí)間為O(n^{1.5});
3. Sedgewick增量序列:{1,5,19,41,109,}
-------------------------------------------------------------------------------------*/
#ifndef SHELL_SORT_H
#define SHELL_SORT_H
#include "typedef.h"
void Shell_sort(T* a, int n)
{
for(int gap = n; gap > 0; gap = gap/2)
{
for(int i = 0; i != n; ++i)
{
T temp = a[i];
int j = i - gap;
for( ; j >= 0 && a[j] > temp; j = j-gap)
a[j+gap] = a[j];
a[j+gap] = temp;
}
}
}
#endif
希望本文所述對(duì)大家C語(yǔ)言程序設(shè)計(jì)有所幫助。
相關(guān)文章
Objective-C中常用的結(jié)構(gòu)體NSRange,NSPoint,NSSize(CGSize),NSRect實(shí)例分析
這篇文章主要介紹了Objective-C中常用的結(jié)構(gòu)體NSRange,NSPoint,NSSize(CGSize),NSRect實(shí)例分析,有助于更加直觀的理解Object-C常用的結(jié)構(gòu)體,需要的朋友可以參考下2014-07-07
C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式
這篇文章主要介紹了C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
C++基于隨機(jī)數(shù)實(shí)現(xiàn)福彩雙色球的方法示例
這篇文章主要介紹了C++基于隨機(jī)數(shù)實(shí)現(xiàn)福彩雙色球的方法,結(jié)合完整實(shí)例形式分析了C++隨機(jī)數(shù)算法的實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-06-06
C++實(shí)現(xiàn)四則混合運(yùn)算計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)四則混合運(yùn)算計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
C語(yǔ)言線性表順序存儲(chǔ)結(jié)構(gòu)實(shí)例詳解
這篇文章主要介紹了C語(yǔ)言線性表順序存儲(chǔ)結(jié)構(gòu)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06

