2015/10/06写下的归并排序、快速排序、二分查找
2015-10-06 20:56
411 查看
归并排序
快速排序
二分查找
#include<iostream> using namespace std; void merge(int a[], int start, int middle, int end) { int index1 = start; int index2 = middle + 1; int * buffer = new int[end - start + 1]; int counter = 0; while(index1 <= middle && index2 <= end) { if(a[index1] <= a[index2]) buffer[counter++] = a[index1++]; else buffer[counter++] = a[index2++]; } if(index1 <= middle) { while(index1 <= middle) buffer[counter++] = a[index1++]; } else { while(index2 <= end) buffer[counter++] = a[index2++]; } for(int i = 0; i < counter; i++) a[start + i] = buffer[i]; } void mergeSort(int a[], int start, int end) { if(start == end) return; int middle = (start + end) / 2; mergeSort(a, start, middle); mergeSort(a, middle + 1, end); merge(a, start, middle, end); return; } int main() { int a[] = {9, 10, 23, 14, 12}; mergeSort(a, 0, sizeof(a) / sizeof(int) - 1); for(int i = 0; i < sizeof(a) / sizeof(int); i++) cout << a[i] << " "; getchar(); }
快速排序
#include<iostream> using namespace std; void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } int partition(int a[], int start, int end) { int pivot = a[start]; int left = start; int right = end; while(left < right) { while(left <= end && a[left] <= pivot) left++; while(right >= start && a[right] > pivot) right--; if(left < right) swap(&a[left], &a[right]); } int middle = right; swap(&a[start], &a[middle]); return right; } void quickSort(int a[], int start, int end) { if(start == end) return; int index = partition(a, start, end); if(index > start) quickSort(a, start, index - 1); if(index < end) quickSort(a, index + 1, end); return; } int main() { int a[] = {9, 10, 23, 14, 12}; quickSort(a, 0, sizeof(a) / sizeof(int) - 1); for(int i = 0; i < sizeof(a) / sizeof(int); i++) cout << a[i] << " "; getchar(); }
二分查找
#include<iostream> using namespace std; int binarySearch(int a[], int start, int end, int target) { while(start <= end) { int middle = (start + end) / 2; if(a[middle] == target) return middle; if(a[middle] > target) end = middle - 1; else start = middle + 1; } return 2147483647;//用2147483647表示没有找到 } int main() { int a[] = {9, 10, 23, 24, 32}; int i = binarySearch(a, 0, sizeof(a) / sizeof(int) - 1, 32); cout << i << " "; getchar(); }
相关文章推荐
- postgresql 按日期范围查询
- 关于ftruncate()
- [Training Video - 4] [Groovy] Initializing log inside class with constructor
- GWXZ模拟题之衷心伴侣
- FZU 1759 Super A^B mod C(数论+快速幂+欧拉函数)
- 二叉排序树
- FZU 2204 7 (环形dp)
- foj2202 Problem 2202 犯罪嫌疑人
- linux shell 管道命令(pipe)使用及与shell重定向区别
- 桶排序和基数排序
- 标量对矩阵求导
- 【目录】工具记录
- 如何设置centos6 不启动桌面环境gnome
- 如何设置centos6 不启动桌面环境gnome
- android手游渠道接入业务+技术全讲解
- 前行的路
- FZU 2203 单纵大法好 (二分+贪心)
- iPhone 6s物料成本不到1500?但你知道了不照样选择剁手嘛
- 【温故而知新】【3】时钟分频-半整数分频N.5
- 关于mysql_affected_rows()