C++算法竞赛之入门篇(2)

继续上篇关于排序的种类,还有许多种,它们是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表达式)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值