shell排序-c语言
生活随笔
收集整理的這篇文章主要介紹了
shell排序-c语言
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// ShellSort.cpp : 定義控制臺應用程序的入口點。
//
#include "stdafx.h"
/***********************************************************************
**實現思想
**?
** 將要排序的一組數按某個增量d分成若干組,每組中記錄的下標相差d.對每組中全部元素進行排序,
** 然后再用一個較小的增量對它進行,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,
** 排序完成
**
***********************************************************************/
/*****************************************************************************
函 數 名 ?: ShellSort
功能描述 ?: 希爾排序
輸入參數 ?:?
pData : 數據
nCount: 數據個數
輸出參數 ?: 無
返 回 值 ?: 無
調用函數 ?: 略
被調函數 ?: 略
修改歷史 ?:
*****************************************************************************/
void ShellSort(int* pData, int nCount)
{
if ((NULL == pData) || (nCount <= 0))
{
return;
}
int iStep = 0;
int iTmp = 0;
for(int iStep = nCount/2;iStep > 0; iStep /= 2) // 設置排序的步長,步長每次減半,直到減到1?
{
for(int i = iStep;i < nCount;i++) ? ? ? ? ? // 定位到每一個元素?
{
for(int j = i - iStep;(j >= 0) && (pData[j] > pData[j+iStep]);j -= iStep ) // 比較相距步長遠的兩個元素的大小,根據排序方向決定如何調換?
{
iTmp = pData[j];
pData[j] = pData[j + iStep];
pData[j + iStep] = iTmp;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int Data[10] = {1,8,3,4,9,6,7,2,5,0};
ShellSort(Data, 10); ? ? ? ?//調用希爾排序
for (int i = 0; i < 10; ++i) ? ? ? ?
{
printf("%d ", Data[i]);
}
return 0;
}
//
#include "stdafx.h"
/***********************************************************************
**實現思想
**?
** 將要排序的一組數按某個增量d分成若干組,每組中記錄的下標相差d.對每組中全部元素進行排序,
** 然后再用一個較小的增量對它進行,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,
** 排序完成
**
***********************************************************************/
/*****************************************************************************
函 數 名 ?: ShellSort
功能描述 ?: 希爾排序
輸入參數 ?:?
pData : 數據
nCount: 數據個數
輸出參數 ?: 無
返 回 值 ?: 無
調用函數 ?: 略
被調函數 ?: 略
修改歷史 ?:
*****************************************************************************/
void ShellSort(int* pData, int nCount)
{
if ((NULL == pData) || (nCount <= 0))
{
return;
}
int iStep = 0;
int iTmp = 0;
for(int iStep = nCount/2;iStep > 0; iStep /= 2) // 設置排序的步長,步長每次減半,直到減到1?
{
for(int i = iStep;i < nCount;i++) ? ? ? ? ? // 定位到每一個元素?
{
for(int j = i - iStep;(j >= 0) && (pData[j] > pData[j+iStep]);j -= iStep ) // 比較相距步長遠的兩個元素的大小,根據排序方向決定如何調換?
{
iTmp = pData[j];
pData[j] = pData[j + iStep];
pData[j + iStep] = iTmp;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int Data[10] = {1,8,3,4,9,6,7,2,5,0};
ShellSort(Data, 10); ? ? ? ?//調用希爾排序
for (int i = 0; i < 10; ++i) ? ? ? ?
{
printf("%d ", Data[i]);
}
return 0;
}
總結
以上是生活随笔為你收集整理的shell排序-c语言的全部內容,希望文章能夠幫你解決所遇到的問題。