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

