【算法】用分治法实现按升序排序的快速排序算法(C++源码)
- 一、任务描述
- 二、步骤描述
- 三、程序运行结果截图
- 四、源代码-未使用vector(C++)
- 五、源代码-使用vector(C++)
一、任务描述
请采用分治法实现按升序排序的快速排序算法,设计测试用例以验证算法的准确性。
要求:使用STL库中的vector存储输入数据。
二、步骤描述
建立vector数组,输入数组的个数,编写输入vector函数put_vec和输出vector函数print_vec。建立快排,递归调用,结束后调用输出函数输出数组。
三、程序运行结果截图
四、源代码-未使用vector(C++)
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int a[101];
int Quicksort(int left, int right)
{
int i,j,t,temp;
if(left>right)
{
return 0;
}
temp=a[left];
i=left;
j=right;
while(i!=j)
{
while(a[j]<=temp&&i<j)
{
j--;
}
while(a[i]>=temp&&i<j)
{
i++;
}
if(i<j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
Quicksort(left,i-1);
Quicksort(i+1,right);
return 0;
}
int main()
{
int i,n;
cout<<"Please put the numbers size:";
cin>>n;
cout<<"Please put the numbers:"<<endl;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
Quicksort(1,n);
cout<<"Print the numbers:"<<endl;
for(i=1;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<a[n];
return 0;
}
五、源代码-使用vector(C++)
#include <iostream>
#include <vector>
#include <cmath>
#include <cstring>
using namespace std;
void put_vec(vector<int>&v)
{
for(size_t i=0 ; i<v.size() ; ++i)
{
cin>>v[i];
}
}
void print_vec(const vector<int>&v)
{
for(size_t i=0 ; i<v.size() ; ++i)
{
cout<<v[i]<<" ";
}
cout<<endl;
}
int Quicksort(vector<int>&v,int left, int right)
{
int i,j,t,temp;
if(left>right)
{
return 0;
}
temp=v[left];
i=left;
j=right;
while(i!=j)
{
while(v[j]>=temp&&i<j)
{
j--;
}
while(v[i]<=temp&&i<j)
{
i++;
}
if(i<j)
{
t = v[i];
v[i] = v[j];
v[j] = t;
}
}
v[left] = v[i];
v[i] = temp;
Quicksort(v,left,i-1);
Quicksort(v,i+1,right);
return 0;
}
int main()
{
vector<int>vec_a;
int vec_size;
cout<<"Please put the number size:";
cin>>vec_size;
vec_a.resize(vec_size);
int n;
n=vec_size;
cout<<"Please put the numbers:";
put_vec(vec_a);
cout<<"Print the numbers:";
print_vec(vec_a);
Quicksort(vec_a,1,n);
return 0;
}