更新時間:2016年07月27日17時58分 來源:傳智播客C/C++學科 瀏覽次數:
void PrintArray(int arr[], int len){ for (int i = 0; i < len; i++){ printf("%d ", arr[i]); } printf("\n"); } //希爾排序 void ShellSort(int arr[], int len){ int increasement = len; do{ //通過算法遞減增量 increasement = increasement / 3 + 1; //獲得每一組的第一個元素下標 for (int i = 0; i < increasement; i++){ //根據第一個元素下標+增量,遍歷每一組元素 for (int j = i + increasement; j < len; j += increasement){ //對當前組進行插入排序 if (arr[j] < arr[j - increasement]){ int temp = arr[j]; int k = j - increasement; for (; k >= i && temp < arr[k]; k -= increasement){ arr[k + increasement] = arr[k]; } arr[k + increasement] = temp; } } } } while (increasement > 1); } int main(){ int arr[] = { 9, 1, 5, 8, 3, 7, 4, 6, 2 }; int len = sizeof(arr) / sizeof(int); //排序前打印 PrintArray(arr, len); ShellSort(arr, len); //排序后打印 PrintArray(arr, len); return EXIT_SUCCESS; } |