这里先总结两种升序排列方法,后面再补充更高级的排序算法以及代实现。
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;
}