各類排序以及折半查詢

2021-08-06 01:37:37 字數 2679 閱讀 5568

//時間複雜度: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...