您的位置:首页 > 编程语言

几个最简单的排序代码

2009-11-04 13:11 309 查看
#include <iostream>
#include "public.h"
using namespace std;
template <class T>
void bubble(T *data,int n)//冒泡
{
int i,j;
T temp;
for(i=0;i<n;i++)
{
for(j=n-1;j>i;j--)
if(data[i]<data[j])
Swap(data[j],data[i]);
}
}
template <class T>
void select(T *data,int n)//选择
{
int i,j,temp;
for(i=0;i<n;i++)
{
temp = i;
for(j=i+1;j<n;j++)

if(data[temp]>data[j])
temp = j;
Swap(data[i],data[temp]);

}
}
template <class T>
void insert(T *data,int n)//插入
{
int i,j;
T temp;
for(i=1;i<n;i++)
{
j=i;
temp = data[i];
while(j>0&&data[j-1]>temp)
{
data[j]=data[j-1];
j--;
}
data[j]=temp;
}
}
template <class T>
void sswap(T &A,T &B)
{
T TEMP;
TEMP = B;
B = A;
A = TEMP;
}
template <class T>
int  quick(T *data,int low,int high)//快速
{
int scanUp,scanDown;
T pivot;
int mid;
if(low>high)
{
return -1;
}
else if(high-low==1)
{
if(data[high]<data[low])
sswap(data[high],data[low]);
return -1;
}

mid = (high+low)/2;
pivot = data[mid];
sswap(data[low],data[mid]);
scanUp = low+1;
scanDown = high;
while(scanDown>scanUp)
{
while(scanUp<=scanDown&&data[scanUp]<=pivot)

{
scanUp++;
}
while(data[scanDown]>pivot)
{
scanDown--;
}
if(scanUp<scanDown)
sswap(data[scanUp],data[scanDown]);
}
data[low] = data[scanDown];
data[scanDown] = pivot;
if(low<scanDown-1)
quick(data,low,scanDown-1);
if(scanDown+1<high)
quick(data,scanDown+1,high);
return 0;
}
int main()
{
int data[11]={2334,564,657,6,87,4354,342,34,5,543};
cout<<"please input a num q,s,b or i:"<<endl;
char a;
cin>>a;
switch(a)
{
case 'q':
quick(data,0,9);
break;
case 's':
select(data,10);
break;
case 'b':
bubble(data,10);
break;
case 'i':
insert(data,10);
break;
default:
cout<<"input error"<<endl;
break;
}
print(data);
}


 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息