更新时间: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; } |