//時間複雜度:o(n^2);空間複雜度:o(1);穩定;
//越有序查詢速度越快:o(n)
void insert_sort(int *arr,int
len)
else
}arr[j+1] = tmp;
}}
,也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本
//分組+直接插入
//時間複雜度:o(n^1.3~1.5);空間複雜度:o(1);不穩定;
void shell(int *arr,int len,int gap)
else
break;
}arr[j + gap] = tmp;
}}void shell_sort(int *arr,int len)
; for(int i = 0 ; i < sizeof(d)/sizeof(d[0]) ; ++i)
}
//時間複雜度:o(n^2);空間複雜度:o(1);穩定;
void bubble_sort(int *arr,int
len)
}
}}
,平均效能最快,有序時效率最低,退化為選擇排序時間複雜度:o(n^2)
//一次快排後,基準左側小於基準,右側大於基準,可用來分離奇偶數
//時間複雜度:o(n*log);空間複雜度:o(log);不穩定;
int quick_part(int
*arr,int low,int high)
arr[low] = tmp;
return low;
}void quick(int
*arr,int low,int high)
void quick_sort(int
*arr,int len)
//每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子檔案的最後
//時間複雜度:o(n^2);空間複雜度:o(1);不穩定;
void select_sort(int *arr,int
len)
tmp = arr[i];
arr[i] = arr[minindex];
arr[minindex] = tmp;
}}
:樹形選擇排序
//處於最大堆的根節點的元素一定是這個堆中的最大值
//每次都取堆頂的元素,將其放在序列最後面,然後將剩餘的元素重新調整為最大堆
//時間複雜度:o(n*log);空間複雜度:o(1);不穩定;
//最好情況下,時間複雜度為o(1).
void heapadjust(int *arr,int start,int end)//時間複雜度:o(log);空間複雜度:o(1)
else
break;
}arr[parent] = tmp;
}void heap_sort(int *arr,int
len)
}
:歸併是指將若干個已排序的子檔案合併成乙個有序的檔案
//時間複雜度:o(n*log);空間複雜度:o(n);穩定;
void merge(int *arr,int
len,int gap)//時間複雜度:o(n*log)
else
}//乙個歸併段已完成另乙個還有資料
while(low1 <= high1)
while(low2 <= high2)
low1 = high2+1;
high1 = low1+gap-1;
low2 = high1+1;
high2 = low2+gap-1; }
//不成對的歸併段
while(low1 < len)
for(i =0 ; i < len ; i++)
free(brr);
}void merge_sort(int *arr,int
len)
}
void show(int *arr,int len)
cout
int search(int *arr,int
len,int key)
else
if(arr[mid] < key)
else
}return
-1;}
以上**均執行無誤:
int main()
; int
len = sizeof(arr)/sizeof(arr[0]);
//insert_sort(arr,len);
//shell_sort(arr,len);
//bubble_sort(arr,len);
//quick_sort(arr,len);
//select_sort(arr,len);
//heap_sort(arr,len);
merge_sort(arr,len);
show(arr,len);
cout,57);
return
0;}
選擇 氣泡排序,折半查詢
include void selectsort int num,int length void swap int num,int i int j void butttlesort int num,int length int main int argc,const char argv 計算陣列的長度...
二分查詢折半查詢排序
在乙個有序的陣列中,折半查詢乙個元素key,如果能找到返回陣列的下表,如果找不到,返回 1。實現如下所示 二分查詢法 author jcm 2016年8月6日 public class binaryserach int flag binarysearch a,19 if flag 1 system....
04陣列排序和折半查詢
排序方法 基礎的有選擇排序和氣泡排序,高階的有希爾排序 快速排序等。1.選擇排序 選擇排序,以公升序為例 class arraysortdemo selectsort arr printarray arr hello world public static void selectsort int a...