1. 程式人生 > >簡單的希爾排序 Shell Sort

簡單的希爾排序 Shell Sort

#include <iostream>
using namespace std;
void ShellSort(int* iArray,int length)
{
		//初始化jump等於length
	int jump = length;
		//標記本趟檢測是否進行了交換,
		//		若進行了 則還有下次從頭開始的檢測,
		//		否則停止,繼續改變jump的值 做另一趟排序
	bool isSwap;
	while(jump != 0)
	{
			//jump每次/2
		jump = jump / 2;
		do{
			int i = 1;
				//初始化表示沒有進行交換
			isSwap = false;
			while( i <= length - jump)
			{
				if(iArray[i] > iArray[i+jump])
				{
					int temp = iArray[i];
					iArray[i] = iArray[i+jump];
					iArray[i+jump] = temp;
					isSwap = true;
				}
				i++;
			}
		}while(isSwap == true);//如果進行了交換說明 增量為jump的序列 
								//可能存在不是有序的 在檢測一遍
							   //否則說明增量為jump的序列是有序的
	}
}
int main()
{
	int iArray[] = {0,50,123,36,25,200,36,95,70,14,10,321,1,3,5,8};
	ShellSort(iArray,15);
	for(int i = 1; i <= 15; i++)
	{
		cout<<iArray[i]<<" ";
	}
	cout<<endl;
	return 0;

}