剑指offer 快速排序

来源:互联网 发布:淘宝店铺权重查询系统 编辑:程序博客网 时间:2024/04/19 17:13

1.快速排序,0,1,2..n-1,   选出枢纽元index,交换a[index]与a[n-1],将小于a[n-1]的元素放在左边,大于的元素放在右边,递归分别对两组进行排序

#include<iostream>using namespace std;#include<time.h>int RandomInRange(int left,int right){if(right>left){srand(time(NULL));return left+rand()%(right-left);//产生start~end之间的随机数}}int partion(int *a,int left,int right){if(a==NULL ||  left<0  ||  right<left)       throw new exception("invalid parameters");int index = RandomInRange(left,right);swap(a[index],a[right]);int i=left-1;for(int j=left;j<right;j++){if(a[j]<a[right]){i++;    if(i!=j)swap(a[i],a[j]);}}++i;swap(a[i],a[right]);return i;}void quickSort(int *a,int left,int right){if(left == right)return ;int index= partion(a,left,right);if(index>left)quickSort(a,left,index-1);if(index<right)quickSort(a,index+1,right);}int main(){int a[]={2,8,7,1,3,5,6,4};int length=sizeof(a)/sizeof(int);quickSort(a,0,length-1);for(int i=0;i<length;i++)cout<<a[i]<<"  ";}




0 0
原创粉丝点击