快速排序
今天来写一下快速排序的代码;
测试数据 就自己编一下吧 哈哈哈
请输入您要进行排序的数据个数:11
请依次输入您要进行排序的数据:5 7 3 6 45 9 26 10 1 8 37
快速排序1 (以中间值为区分点)
#include<iostream>
using namespace std;
void quicksort(int *p,int l,int s)
{
int mid,temp;
int i=l,j=s;
mid=p[(l+s)/2];//中间值
do
{
while(p[i]<mid)i++;//从最右边找比中间值小的数
while(p[j]>mid)j--;//从最左边找比中间值大的数
if(i<=j)//进行交换
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
i++;
j--;
}
}while(i<=j);
if(i<s)quicksort(p,i,s);
if(l<j)quicksort(p,l,j);
}
int main()
{
//请输入您要进行排序的数据个数
int n;
cin>>n;
int *p=new int[n+1];
for(int i=1;i<=n;i++)
cin>>p[i];
quicksort(p,1,n);//调用函数
for(int i=1;i<=n;i++)
{
if(i!=n)
cout<<p[i]<<" ";
else
cout<<p[i];
}
delete []p;//销毁数组
system("pause");
return 0;
}
快速排序2 (以最左边值为比较值)
#include<iostream>
using namespace std;
void quicksort(int *w,int left,int right)
{
int i,j,t,temp;
if(left>right)
return;
temp=w[left];//记录此时的最左边值
//使用i 和 J分别记录左右大小
i=left;
j=right;
while(i!=j)
{
while(w[j]>=temp&&i<j)//从最右边找比temp要小的数
j--;
while(w[i]<=temp&&i<j)//从最左边找比temp要大的数
i++;
if(i<j)//然后在i<j这一条件成立的情况下 进行数据交换
{
t=w[i];
w[i]=w[j];
w[j]=t;
}
}
w[left]=w[i];//同时将此时最右边的值与此时的w[i]值进行交换
w[i]=temp;
quicksort(w,left,i-1);//继续调用函数本身进行排序
quicksort(w,i+1,right);
return ;
}
int main()
{
int n;
cin>>n;//输入要排序的数字个数
int *w=new int [n+1];//使用new关键字创建动态数组
for(int i=1;i<=n;i++)
cin>>w[i];
quicksort(w,1,n);//函数调用
for(int i=1;i<=n;i++)//对排序好的数据进行输出 末尾没有空格
{
if(i!=n)
cout<<w[i]<<" ";
else
cout<<w[i];
}
delete []w;//对new关键字声明的动态数组进行销毁
system("pause");
return 0;
}
虽然只是写了一些曾经的东西,但是就当做是复习巩固吧,这也是成长的足迹吧!
谢谢喽!