立此存照(12)[C++]快速排序与二分法查找及C++库函数排序
来源:互联网 发布:网络推广日常工作 编辑:程序博客网 时间:2024/06/07 09:30
#include<iostream>using namespace std;void swap(int &v1, int &v2){int temp = v1;v1 = v2;v2 = temp;}void quick_sort(int arr[], int len){if(len > 1){int left = 1, right = len-1;do{while(left < len && arr[left] <= arr[0])left++;while(right > 0 && arr[right] >= arr[0])right--;if(right < left)//规避case:5 1 11 5 5break;if(arr[left] > arr[0] && arr[right] < arr[0] && right > 0 && left < len){swap(arr[left], arr[right]);right--;left++;}}while(left < right);swap(arr[0], arr[left-1]);quick_sort(&arr[0], left-1);quick_sort(&arr[left], len - left);}}void prtArr(int arr[], int len){for(int i=0;i < len;i++)cout<<arr[i]<<" ";cout<<endl;}int main(){unsigned int ARRLEN = 0;int arr[] = {1, 12, 5, 5, 5, 1, 12, 5, 5, 5, 1, 12, 5, 1, 12, 5, 5, 5, 1, 12, 5, 5, 5, 5, 5, 1, 12, 5, 5, 5, 1, 12, 5, 5, 5, 1, 12, 5, 5, 5};ARRLEN = sizeof(arr) / sizeof(unsigned int);quick_sort(arr, ARRLEN);prtArr(arr, ARRLEN);return 0;}
二分法:
#include<iostream>#include<cstdlib>using namespace std;int binary_search(int arr[], int len, int val){int low = 0, high = len-1, mid = 0;while(low <= high){mid = (low + high) / 2;if(val == arr[mid])return mid;if(val < arr[mid])high = mid-1;elselow = mid + 1;}return -1;//查找失败}void prtArr(int arr[], int len){for(int i=0;i < len;i++)cout<<arr[i]<<" ";cout<<endl;}int comparator(const void* p1, const void* p2){int v1 = *((int*)p1);int v2 = *((int*)p2);return ((v2 > v1) ? -1 : (v2 < v1) ? 1 : 0);}int main(){unsigned int ARRLEN = 0;int val = 12;int arr[] = {1, 12, 3};ARRLEN = sizeof(arr) / sizeof(unsigned int);qsort(arr, ARRLEN, sizeof(int), comparator);prtArr(arr, ARRLEN);cout<<binary_search(arr, ARRLEN, val)<<endl;return 0;}
快速排序的另一种C++写法,个人觉得更优化,更易书写:
#include <iostream>using namespace std;#defineARRLEN(arr, type)(sizeof(arr) / sizeof(type))void quick_sort(int *p, int low, int high){if(low < high){int val = p[low];//index为low出的空间多了出来int left = low, right = high;while(left < right){while(left < right && p[right] >= val)--right;p[left] = p[right];while(left < right && p[left] <= val)++left;p[right] = p[left];}p[left] = val;quick_sort(p, low, left-1);quick_sort(p, left+1, high);}}void prtArr(const int *p, int len){for(int i=0;i < len;i++)cout<<*p++<<((i == len-1) ? "" : " ");cout<<endl;}int main(){int arr[] = {1, 12, 5, 5, 5, 1, 12, 5, 5, 5, 1, 12, 5, 1, 12, 5, 5, 5, 1, 12, 5, 5, 5, 5, 5, 1, 12, 5, 5, 5, 1, 12, 5, 5, 5, 1, 12, 5, 5, 5};cout<<ARRLEN(arr, int)<<endl;prtArr(arr, ARRLEN(arr, int));quick_sort(arr, 0, ARRLEN(arr, int) - 1);prtArr(arr, ARRLEN(arr, int));return 0;}执行结果:
0 0
- 立此存照(12)[C++]快速排序与二分法查找及C++库函数排序
- 二分法查找与排序
- 二分法快速排序法 qsort C源码
- C/C++ 库函数快速排序 qsort
- 调用c语言库函数实现快速排序
- c语言快速排序的库函数整理
- c语言库函数编写快速排序
- 查找与排序之二分法查找篇(C语言实现)
- C语言使用stdlib.h库函数的二分查找和快速排序程序
- 数据结构之二分法查找、快速排序思想与实现
- 数据结构之二分法查找、快速排序思想与实现
- 菜鸟学C语言三:快速排序与调用C语言库函数qsort()
- c语言快速排序与二分查找算法
- 冒泡排序、选择排序、快速排序、二分法查找
- C语言库函数中的排序和查找函数
- 排序-快速排序(c)
- 二分法——查找、排序以及库函数bsearch的用法
- 二分法——查找、排序以及库函数bsearch的用法
- cocos2dx-lua 加载和绑定ccbi 中对象
- XMLHTTP.readyState的状态解析
- BZOJ1355: [Baltic2009]Radio Transmission
- Linux环境下段错误的产生原因及调试方法小结
- 延迟移入移除setTimeOut的妙用
- 立此存照(12)[C++]快速排序与二分法查找及C++库函数排序
- 动态规划的一道题目
- quick-cocos2dx基础(二):tables的遍历
- android实现 弹出的软键盘带搜索键
- for-each遍历Map
- ext gridView 合并单元格
- FFMPEG sws_scale算法性能测试
- UVA 10066 - The Twin Towers
- mysql load 从文件读入数据提示ERROR 1148