动物世界

快速排序

#include<iostream>
using namespace std;
int map[50];
int n;
bool sure()
{
int i;
bool flag=true;
for(i=0;i<n-1;i++)
if(map[i]>map[i+1]){
flag=false; break;
}
return flag;
}
void dochange(int star,int end)
{
int i,j;
int high,low,mid;
int key;
int k,weizhi,p;
bool flag=true;
if(star>=end)return;
low=0;
weizhi=star;
high=end;
i=star;j=end;
key=map[star];
while(i<=j)
{

if(flag){
if(map[j]<key){
map[weizhi]=map[j];
map[j]=key;
weizhi=j;
flag=false;
}j--;
}
else{
if(map[i]>key){
map[weizhi]=map[i];
map[i]=key;
weizhi=i;
flag=true;
}i++;
}

}

if(sure())return;
else{
if(weizhi==0)dochange(weizhi+1,end);
else if(weizhi==n-1)dochange(star,weizhi-1);
else{
dochange(star,weizhi-1);
dochange(weizhi+1,end);
}
}
}
int main()
{
int i;
while(cin>>n&&n)
{
for(i=0;i<n;i++)
cin>>map[i];
dochange(0,n-1);
for(i=0;i<n;i++)
cout<<map[i]<<endl;
}
return 1;
}


编辑器加载中...快速排序 快速排序的基本思想: 已知一个数组R[0...n-1]为无序数组,选择R[0]作为key,变量i=0,j=n-1; 从后向前扫描到第一个小于key,将该元素与key所在位置的元素换位置,在从前向后扫描到第一个大于key,则与key所在位置元素换位置,在从上次j扫描到的地方进行扫描,依次,知道i==j的时候,结束,此时,获得的数组使得,key前的元素都小于key,key后的元素都大于key.在采用分治递归的方法,对key位置左右的数组进行如此的运算,直到整个数组满足从小到大的排列顺序为止.

posted on 2012-01-19 19:23  动物世界  阅读(257)  评论(0)    收藏  举报

导航