快速排序的C++实现代码
2011-08-23 17:24
639 查看
#include <iostream>
using namespace std;
template <typename T>
void Swap(T &x,T &y)
{
T tmp;
tmp = x;
x=y;
y=tmp;
}
/*template <typename T>
int InitMid(T data[],int left,int right)
{
int centre = (left+right)/2;
if(data[left]>data[centre])
Swap(data[left],data[centre]);
if(data[left]>data[right])
Swap(data[left],data[right]);
if(data[centre]>data[right])
Swap(data[centre],data[right]);
Swap(data[centre],data[right-1]);
return data[right-1];
}*/
//这种写法的快排交换次数比较多,如果不将标志元素和前后元素交换,只将前后元素交换可以减少
//交换次数,稍后在研究这个
template <typename T>
void QickSort(T data[],int left,int right)
{
int i=left;
int j=right;
T tmp = data[left];
while(i<j)
{
for(;i<j&&data[j]>=tmp;j--);//此处无等号在数组中有相同元素情况下会导致死循环
swap(data[i],data[j]);
for(;i<j&&data[i]<=tmp;i++);
swap(data[i],data[j]);
}
if(i-1>left)
QickSort(data,left,i-1);
if(i+1<right)
QickSort(data,i+1,right);
}
int main()
{
int num[10]={2,5,1,3,8,7,4,9,6,0};
QickSort(num,0,9);
for(int i=0;i<10;i++)
cout<<num[i]<<" ";
cout<<endl;
return 1;
}
using namespace std;
template <typename T>
void Swap(T &x,T &y)
{
T tmp;
tmp = x;
x=y;
y=tmp;
}
/*template <typename T>
int InitMid(T data[],int left,int right)
{
int centre = (left+right)/2;
if(data[left]>data[centre])
Swap(data[left],data[centre]);
if(data[left]>data[right])
Swap(data[left],data[right]);
if(data[centre]>data[right])
Swap(data[centre],data[right]);
Swap(data[centre],data[right-1]);
return data[right-1];
}*/
//这种写法的快排交换次数比较多,如果不将标志元素和前后元素交换,只将前后元素交换可以减少
//交换次数,稍后在研究这个
template <typename T>
void QickSort(T data[],int left,int right)
{
int i=left;
int j=right;
T tmp = data[left];
while(i<j)
{
for(;i<j&&data[j]>=tmp;j--);//此处无等号在数组中有相同元素情况下会导致死循环
swap(data[i],data[j]);
for(;i<j&&data[i]<=tmp;i++);
swap(data[i],data[j]);
}
if(i-1>left)
QickSort(data,left,i-1);
if(i+1<right)
QickSort(data,i+1,right);
}
int main()
{
int num[10]={2,5,1,3,8,7,4,9,6,0};
QickSort(num,0,9);
for(int i=0;i<10;i++)
cout<<num[i]<<" ";
cout<<endl;
return 1;
}
相关文章推荐
- C++代码实现快速排序
- 快速排序的C++实现代码
- C++实现快速排序(源代码)
- 插入排序(正序、倒序)-c++代码实现及运行实例结果
- 数据结构队列C++代码实现
- windows下,c /c++实现磁盘扫描,结合配置文件,读取特定后缀文件目录代码
- 查找-c++代码实现及运行实例结果
- 平衡二叉搜索树(AVL树)的原理及实现源代码(有图文详解和C++、Java实现代码)
- C++实现快速排序
- 斐波那契数列 C++ 实现代码
- Java编程实现快速排序及优化代码详解
- 归并排序-c++代码实现及运行实例结果
- 【LeetCode】【Python】【C++】2. Add Two Numbers代码实现
- Bezier曲线原理及实现代码(c++)
- BottomupSort算法 c++代码实现
- pc-lint静态代码分析工具(检查linux下C++代码的实现方式)
- 选择排序-c++代码实现及运行实例结果
- 冒泡排序-c++代码实现及运行实例结果
- 快速排序C++代码实现
- Linux环境C/C++起Socket Server监听8080端口的代码实现