簡單的希爾排序 Shell Sort
阿新 • • 發佈:2018-12-24
#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; }