diff --git a/Sort/insert_sort.c b/Sort/insert_sort.c index c4e7098..d7dead9 100644 --- a/Sort/insert_sort.c +++ b/Sort/insert_sort.c @@ -136,30 +136,27 @@ void heap_swop(int *a,int *b){ //自顶向下调整 -void heap_public_adjust(int *a,int i,int length){ +void heap_public_adjust(int *a,int parent,int length){ // 三个数里取最大的一个 a[i],a[2i+1],a[2i+2],跟a[i]交换;然后是 a[(i-1)/2],a[i],a[i+1] .. 一直到a[0] - int tmp = i , max;// - while(2*tmp+1= a[max]) + if (a[parent] >= a[max])// parent > parent >= max(left, right) { break; } else { - heap_swop(&a[tmp],&a[max]); - tmp = 2*tmp+1; + heap_swop(&a[parent],&a[max]); + parent = max; //继续向下, 比对, 交换, 保证所有树 父节点 >= 子节点 + max = 2 * parent + 1; } } @@ -277,8 +274,8 @@ int main(){ start = clock(); - merge_sort(a,sizeof(a)/sizeof(int)); // 0.002s,可以看到,归并排序还是很快的 - //heap_sort(a,sizeof(a)/sizeof(int)); // 有buggggggg + //merge_sort(a,sizeof(a)/sizeof(int)); // 0.002s,可以看到,归并排序还是很快的 + heap_sort(a,sizeof(a)/sizeof(int)); // 有buggggggg //quicksort(a,0,sizeof(a)/sizeof(int)-1); // 0.01s //insert_sort(a,sizeof(a)/sizeof(int)); // 3.85s //select_sort(a,sizeof(a)/sizeof(int)); // 5.3s