希尔排序
2013-09-05 14:38
190 查看
希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。
C语言:
C++:
JAVA:
C语言:
#include <stdio.h> int main() { const int n = 5; int i, j, temp; int gap = 0; int a[] = {5, 4, 3, 2, 1}; while (gap<=n) { gap = gap * 3 + 1; } while (gap > 0) { for ( i = gap; i < n; i++ ) { j = i - gap; temp = a[i]; while (( j >= 0 ) && ( a[j] > temp )) { a[j + gap] = a[j]; j = j - gap; } a[j + gap] = temp; } gap = ( gap - 1 ) / 3; } }
C++:
void shellsort(int *data, size_t size) { for (int gap = size / 2; gap > 0; gap /= 2) for (int i = gap; i < size; ++i) { int key = data[i]; int j = 0; for( j = i -gap; j >= 0 && data[j] > key; j -=gap) { data[j+gap] = data[j]; } data[j+gap] = key; } }
JAVA:
static <E extends Comparable<? super E>> void shellSort(List<E> a) { int h = 1; while (h < a.size()/3) h = h*3 + 1; // <O(n^(3/2)) by Knuth,1973>: 1, 4, 13, 40, 121, ... for (; h >= 1; h /= 3) for (int i = h; i < a.size(); i++) for (int j = i; j >= h && a.get(j).compareTo(a.get(j-h)) < 0; j-=h) Collections.swap(a, j, j-h); }