蓝桥杯:常用的几种升(降)序排列方法

这里先总结两种升序排列方法,后面再补充更高级的排序算法以及代实现。

1.选择排序

排序思想:在长度为N的无序数组中,第一次遍历N-1个数,找到最小的数值与第一个元素交换;第二次遍历N-2个数,找到最小的数值与第二个元素交换;依次类推,直到第N-1次遍历,找到最小的数值与第N-1个元素交换,排序完成。
C++代码实现如下:

#include <iostream>
using namespace std;

int main()
{
	int n=0;
	int temp; 
	cin>>n; //输入待排列的个数n 
	int numArray[n];
	for(int i=0; i<n; i++)
	{
		cin>>numArray[i];    //一次输入n个数 
	}
	//升序排列
	for(int i=0; i<n; i++)
	{
		for(int j=i; j<n; j++)
		{
			if(numArray[j]<numArray[i])
			{
				temp=numArray[i];
				numArray[i]=numArray[j];
				numArray[j]=temp;
			}
		}
	}
	//输出显示
	for(int i=0; i<n; i++)
	{
		cout<<numArray[i]<<" ";
	} 
	return 0;
} 

2.冒泡排序

排序思想:第一次,依次比较相邻的两个数,如果后面的数小,就交换位置,直到最大值冒泡到最后面;第二次,依次比较相邻的两个数(比到前N-1个数为止),如果后面数小,就交换位置,直到次大值冒泡到数列倒数第二的位置。依次类推,两个数比较大小,使得较大的数向后沉,较小的数向前冒。
代码实现:

#include <iostream>
using namespace std;

int main()
{
	int n=0;
	int temp; 
	cin>>n; //输入待排列的个数n 
	int numArray[n];
	for(int i=0; i<n; i++)
	{
		cin>>numArray[i];    //一次输入n个数 
	}
	//数列顺排 
	for(int i=0; i<n; i++)
	{
		for(int j=0; j<n-i; j++)
		{
			if(numArray[j]>numArray[j+1])
			{
				temp=numArray[j+1];
				numArray[j+1]=numArray[j];
				numArray[j]=temp;
			}
		}
	}
	//输出显示
	for(int i=0; i<n; i++)
	{
		cout<<numArray[i]<<" ";
	} 
	return 0;
} 
发布了45 篇原创文章 · 获赞 50 · 访问量 3535

猜你喜欢

转载自blog.csdn.net/wjinjie/article/details/104543869