自底向上排序法,可以說比冒泡排序法快了很多。基本思想就是: 首先2個一組,一組的,排好序, 然後4個一組一組的排好序 .......8個........ 直到全部排完 這裡就是存在一個問題,中間過渡的時候,需要一個臨時數組去保存數據,其實就是每一個片段都是插入排序法的變體。 代碼如下: [csharp] private int[] sortedData; public int[] Sort(int[] data) { sortedData = new int[data.Length]; int t = 1; while (t < data.Length) { int dt = t * 2; int i = 0; while (i + dt <= data.Length) { merge(data, i, i + t, i + dt - 1); i = i + dt; } if (i + t < data.Length) { merge(data, i, i + t, data.Length -1); } t = t * 2; } return sortedData; } private void merge(int[] data, int index1, int index2, int end) { int j = index1; int k = index2; int i = index1; while (j < index2 && k <= end) { if (data[j] < data[k]) { sortedData[i] = data[j]; j++; i++; } else { sortedData[i] = data[k]; k++; i++; } } if (j == index2) { while (k <= end) { sortedData[i] = data[k]; k++; i++; } } else { while (j < index2) { sortedData[i] = data[j]; j++; i++; } } i = index1; for (; i <= end; i++) { data[i] = sortedData[i]; } }