算法导论7.1-4习题解答(快速排序)
2011-03-21 21:50
656 查看
CLRS 7.1-4 :
应如何修改QUICKSORT,才能使其按非增序进行排序?
算法思想:
改掉书上partition算法中的<=为>=
#include <iostream>
using namespace std;
void quick_sort(int*&a, int p, int r);
int partition(int*&a, int p, int r);
int main()
{
const int LEN =20;
int b[LEN] = {12, 43, 0, -4, 98, 75, 64, 88, 5, 32, 11, 12, 13, 84, 34, 27, -5, -244, 49, 345};
int* a =new int[LEN];
for(int i =0; i < LEN; i++)
a[i] = b[i];
quick_sort(a, 0, LEN -1);
for(int i =0; i < LEN; i++)
cout<<a[i]<<endl;
return0;
}
void quick_sort(int*&a, int p, int r)
{
if(p < r)
{
int q = partition(a, p, r);
quick_sort(a, p, q -1);
quick_sort(a, q +1, r);
}
}
int partition(int*&a, int p, int r)
{
int j = p;
for(int i = p; i < r; i++)
{
if(a[i] >= a[r])
{
if(i != j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
j++;
}
}
int ex = a[j];
a[j] = a[r];
a[r] = ex;
return j;
}
PS:第七章其他题目都为算法证明题,学的不深,都下不了手。
应如何修改QUICKSORT,才能使其按非增序进行排序?
算法思想:
改掉书上partition算法中的<=为>=
#include <iostream>
using namespace std;
void quick_sort(int*&a, int p, int r);
int partition(int*&a, int p, int r);
int main()
{
const int LEN =20;
int b[LEN] = {12, 43, 0, -4, 98, 75, 64, 88, 5, 32, 11, 12, 13, 84, 34, 27, -5, -244, 49, 345};
int* a =new int[LEN];
for(int i =0; i < LEN; i++)
a[i] = b[i];
quick_sort(a, 0, LEN -1);
for(int i =0; i < LEN; i++)
cout<<a[i]<<endl;
return0;
}
void quick_sort(int*&a, int p, int r)
{
if(p < r)
{
int q = partition(a, p, r);
quick_sort(a, p, q -1);
quick_sort(a, q +1, r);
}
}
int partition(int*&a, int p, int r)
{
int j = p;
for(int i = p; i < r; i++)
{
if(a[i] >= a[r])
{
if(i != j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
j++;
}
}
int ex = a[j];
a[j] = a[r];
a[r] = ex;
return j;
}
PS:第七章其他题目都为算法证明题,学的不深,都下不了手。
相关文章推荐
- 算法导论2-4习题解答(合并排序算法)
- Introduction to Algorithms 算法导论 第4章 递归式 学习笔记及习题解答
- 算法导论8.2-4习题解答(计数排序)
- 算法导论6.1-2习题解答
- 算法导论12.1-3习题解答(非递归中序遍历)
- 算法导论6.1-7习题解答
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- 算法导论8.3-4习题解答(基数排序)
- 算法导论10.1-7习题解答(用两个队列实现一个栈)
- 算法导论6.2-5习题解答(堆排序)
- Introduction to Algorithms 算法导论 第3章 函数的增长 学习笔记及习题解答
- 算法导论6.3-3习题解答
- Introduction to Algorithms 算法导论 第1章 基础知识 学习笔记及习题解答
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- 【通告】算法导论习题解答
- 算法导论9.2-3习题解答(寻找第i小的数)
- 算法导论8-5习题解答(平均排序)
- 算法导论14.1节习题解答
- Introduction to Algorithms 算法导论 第2章 算法入门 学习笔记及习题解答
- 快速排序的C#实现以及,算法导论上之后一个习题的思考