排序與查詢的最好演算法
阿新 • • 發佈:2018-12-07
排序與查詢演算法有很多種,我們不必全部記住它,只需記住最快的方法就好了(當然,你也可以用c#自帶的方法或者Linq,這不在本文討論之列)
直接上程式碼:
/// <summary> /// 折半查詢 /// </summary> /// <param name="dDataList"></param> /// <param name="data"></param> /// <returns></returns> public static int BinarySearch(List<int> dDataList, int data, int low, int high) { int mid = (low + high) / 2; if (dDataList[mid] == data) return mid; if (low > high) return -1; if (data < dDataList[mid]) return BinarySearch(dDataList, data, low, mid - 1); else return BinarySearch(dDataList, data, mid + 1, high); }
/// <summary> /// 快速排序 /// </summary> /// <param name="dDataList"></param> /// <param name="low"></param> /// <param name="high"></param> public static void QuickSort(ref List<int> dDataList, int low, int high) { if (low >= high) return; int temp = dDataList[low];//以a[low]為樞紐值 int i = low, j = high; //一趟快速排序 while (i < j) {//雙向掃描 while (i < j && dDataList[j] >= temp) j--; dDataList[i] = dDataList[j]; while (i < j && dDataList[i] <= temp) i++; dDataList[j] = dDataList[i]; } dDataList[i] = temp;//放置樞紐值 //分別對左邊、右邊排序 QuickSort(ref dDataList, low, i - 1); QuickSort(ref dDataList, i + 1, high); }