继续上篇关于排序的种类,还有许多种,它们是C++语言的基础,很好的运用可以省下很多力气。
1.选择排序
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++)
if(a[i]>a[j])
swap(a[i],a[j]);
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
从第2位开始和第1位比较,如果比第1位小则跟第2位数字换位,然后从第2位开始,以此类推将输入的数排序。
2.插入排序
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int main()
{
int n,i,k,j,temp;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
for(int j=i-1;j>=1;j--){
if(a[j]<a[i])break;
}
if(j!=i-1){
temp=a[i];
for(k=i-1;k>j;k--){
a[k+1]=a[k];
}
a[k+1]=temp;
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
将要插入的数和输入的数进行比较,找到一个合适的位置插入,后面的数组都向后移一位。
3.计数排序(桶排序)
#include<bits/stdc++.h>
using namespace std;
int a[10005];
const int k=10001;
int main()
{
int n,x;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
a[x]++;
}
for(int i=0;i<k;i++)
for(int j=a[i];j>0;j--)
cout<<i<<" ";
return 0;
}
将每个数字存入单独一个和其下标的数组,利用数组的下标进行排序。
4.快速排序
#include<bits/stdc++.h>
using namespace std;
int part(int* r,int low,int hight)
{
int i=low,j=hight,point=r[low];
while(i<j)
{
while(i<j&&r[j]>point)
{
j--;
}
if(i<j)
{
swap(r[i++],r[j]);
}
while(i<j&&r[i]<=point)
{
i++;
}
if(i<j)
{
swap(r[i],r[j--]);
}
}
return i;
}
void Quicksort(int*r,int low,int hight)
{
int mid;
if (low<hight)
{
mid=part(r,low,hight);
Quicksort(r,low,mid-1);
Quicksort(r,mid+1,hight);
}
}
int main()
{
int a[10001];
int N;
cout<<"请输入要排序的数据的个数: "<<endl;
cin>>N;
cout<<"请输入要排序的数据: "<<endl;
for(int i=0;i<N;i++)
{
cin>>a[i];
}
cout<<endl;
Quicksort(a,0,N - 1);
cout<<"排序后的序列为: "<<endl;
for(int i=0;i<N;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
从输入数字的两端开始向中间移动,就像上坡一样,将小的数排到左边,大的数排到右边,到中间碰到一起后相向而行,继续完成运行。
到这里排序部分结束,下面讲函数部分。
函数
函数可将我们的重复的步骤简化只需要调用前面定义的函数即可,可与帮助我们更快,更有效率的完成编程。我们可以将排序也现在函数中以便我们更好的使用。
我们刚开始认识函数,可以从它的格式入手1.返回值类型
2.函数名
3.参数表列
4.函数体语句
5.return表达式;
语法:返回值类型 函数名(参数列表)
{
函数体语句
return表达式
}
例:int (返回值类型)ggg(函数名)(int man1,int man2)(参数列表)
int man=man1+man2;(函数体语句)return man;(return表达式)。