C语言中的排序、二分查找

来源:互联网 发布:大数据云计算研究方向 编辑:程序博客网 时间:2024/05/29 17:28

下午要去华为参加面试了,听说很头疼啊,复习下基本的排序


#include <stdlib.h>#include <stdio.h>#include <sstream>#include <algorithm>#include <vector>#include <iostream>#include <iterator>using namespace std;static void swap(int * const var1, int * const var2){int tmp_val = *var1;*var1 = *var2;*var2 = tmp_val;}static void quick_sort(int * const arr, const int low, const int high){int p = -1, q = 0, i = low, key = arr[high];if(high <= low)return ;for(i = low; i < high; i++)if(arr[i] < key){p++;swap(arr + p, arr + i);}swap(arr + high, arr + p + 1);quick_sort(arr, low, p);quick_sort(arr, p + 2, high);}static void bubble_sort(int * const arr, const int arr_size){int i = 0; int j = 0;int tmp_val = 0;int max_val = 0;for(i = arr_size - 1; i >= 0; i--){for(j = 1; j <= i; j++){if(arr[j] < arr[j-1])swap(arr + j, arr + j - 1);}}}static void insert_sort(int * const arr, int arr_size){int i = 0, j = 0;int key = 0;for(i = 1; i < arr_size; i++){key = arr[i];for(j = i; (j >= 1) && (arr[j - 1] < key); j--)arr[j] = arr[j - 1];arr[j] = key;}}static void merge_sort(int * const arr, int low, int high){int mid = low + (high - low) / 2;int l = low, r = mid + 1;const int lmax = mid, rmax = high;std::vector<int> tmp_vec;if(high <= low)return;merge_sort(arr, low, mid);merge_sort(arr, mid + 1, high);for(; l <= lmax && r <= rmax;){if(arr[l] > arr[r])tmp_vec.push_back(arr[l++]);elsetmp_vec.push_back(arr[r++]);}for( ; l <= lmax; )tmp_vec.push_back(arr[l++]);for( ; r <= rmax; )tmp_vec.push_back(arr[r++]);copy(tmp_vec.begin(), tmp_vec.end(), arr + low);}static int binary_search(const int * const arr, int low, int high, int key){int mid = low + (high - low) / 2;if(low > high)return -1;if(arr[mid] == key)return mid;if(arr[mid] > key)return binary_search(arr, mid + 1, high, key);elsereturn binary_search(arr, low, mid - 1, key);}int main(){int arr[] = {1000, 100, 2000,230,90,10,100};merge_sort(arr, 0, sizeof(arr)/sizeof(int) - 1);copy(arr, arr + sizeof(arr)/sizeof(int), ostream_iterator<int>(cout, " "));cout << endl;cout << binary_search(arr, 0, sizeof(arr)/sizeof(int) - 1, 10) << endl;cout << endl;}

0 0