【刷题之路】快速排序
2016-05-30 21:02
288 查看
经典算法
class QuickSort {
public:
int* quickSort(int* A, int n) {
// write code here
quicks(A,0,n-1);
return A;
}
void quicks(int* a,int left,int right){
int i,j,temp;
if(left<right){
i=left;
j=right;
temp=a[i];
while(i<j){
while(i<j&&temp<=a[j]) j--; //从后往前依次寻找第一个比temp小的数,并与a[i]交换,现在a[j]空出来了
if(i<j) a[i++]=a[j]; //注意i++与j--,i 与j在本次循环中已经调整过,下一次循环应该从下一个与上一个开始
while(i<j&&temp>a[i]) i++;//从前往后依次寻找第一个比temp大的数,将a[j]的坑填上,一次循环结束
if(i<j) a[j--]=a[i];
}
a[i]=temp; //最后temp填入最后的坑中
quicks(a,left,i-1); //递归实现
quicks(a,i+1,right);
}
}
};
class QuickSort {
public:
int* quickSort(int* A, int n) {
// write code here
quicks(A,0,n-1);
return A;
}
void quicks(int* a,int left,int right){
int i,j,temp;
if(left<right){
i=left;
j=right;
temp=a[i];
while(i<j){
while(i<j&&temp<=a[j]) j--; //从后往前依次寻找第一个比temp小的数,并与a[i]交换,现在a[j]空出来了
if(i<j) a[i++]=a[j]; //注意i++与j--,i 与j在本次循环中已经调整过,下一次循环应该从下一个与上一个开始
while(i<j&&temp>a[i]) i++;//从前往后依次寻找第一个比temp大的数,将a[j]的坑填上,一次循环结束
if(i<j) a[j--]=a[i];
}
a[i]=temp; //最后temp填入最后的坑中
quicks(a,left,i-1); //递归实现
quicks(a,i+1,right);
}
}
};
相关文章推荐
- 快速排序
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#快速排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析