快速排序
来源:互联网 发布:淘宝店铺宝贝上架教程 编辑:程序博客网 时间:2024/06/02 06:02
#include <iostream>using namespace std;/*算法思想1.将数组首位元素作为划分基准t 2. 从后往前寻找小于 t的元素 交换之3. 从前往后寻找大于等于 t的元素 交换之4.填写基准元素5.返回划分位置。 */int partition(int *data,int l,int r){ int t=data[l]; while(l<r){ while(l<r&&data[r]>=t) --r; data[l]=data[r]; while(l<r&&data[l]<t) ++l; data[r]=data[l]; } data[l]=t; return l;}void quick_sort(int *data,int l,int r){ if(l<r){ int mid= partition(data,l,r); quick_sort(data,l,mid-1); quick_sort(data,mid+1,r); }}int main(){int a[10]={34,1,56,3,24,5,6,3,8,0}; quick_sort(a,0,9);for(int i=0;i<10;++i)cout<<a[i]<<" ";return 0;}
解法二:
#include <iostream>#include <algorithm>#include <vector>using namespace std; /* 基准选择:data[left] data[center] data[right] 的值进行比较1. data[left]=min(data[right],data[left],data[mid])2. data[right]=max(data[right],data[center],data[left])3. data[center]=median(data[left],data[right],data[center])4. 将data[center]放置在data[right-1] */ int median(vector<int> &data,int left,int right){ int center=(left+right)/2; if(data[left]>data[center]) swap(data[left],data[center]); if(data[left]>data[right]) swap(data[left],data[right]); if(data[center]>data[right]) swap(data[center],data[right]); swap(data[center],data[right-1]); return data[right-1]; } int partition(vector<int> &data,int left,int right){ int pivot=median(data,left,right); int i=left,j=right-1; while(1){ while(data[++i]<pivot){}//从data[left+1] while(data[--j]>pivot){}//从data[right-2] if(i<j) swap(data[i],data[j]); else break; } swap(data[i],data[right-1]); return i; } /*快速选择算法*/ void quick_select(vector<int> &data,int k,int left,int right){ if(left<right){ int mid=partition(data,left,right); if(k<mid) quick_select(data,k,left,mid-1); else if(k>mid) quick_select(data,k,mid+1,right); else return ; } }/*快速排序算法*/void quick_sort(vector<int> &data,int left,int right){ if(left<right){ int mid=partition(data,left,right); quick_sort(data,left,mid-1); quick_sort(data,mid+1,right); }}int main(){ int d[]={1,2,3,2,2,2,5,4,2}; vector<int> data(d,d+9); // quick_select(data,8,0,8); //for(int i=0;i<9;++i) // cout<<data[i]<<" "; quick_sort(data,0,8); for(int i=0;i<9;++i) cout<<data[i]<<" "; return 0;}
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- lua_state
- MyBatis框架
- ListView点击无效与ListView里有Button实现问题
- Nexus入门指南(图文)
- mysql ddl 的相关操作
- 快速排序
- Eclipse 默认设置的换行字符长度
- IDEA / WebStorm / PhpStorm 添加jQuery自动提示,自动补全,提示文档
- 火狐浏览器扩展不兼容问题解决
- win32相关对共享资源操作几种方式
- 深入学习Struts2
- iOS:个性化UITextView(缩进,行距,铺满)
- html和CSS应该知道内容
- 灰度直方图