排序:所谓排序就是把无须的数据变的有顺序起来。
1.冒泡排序:
冒泡排序的基本思想:每次比较两个相邻的元素,如果他们的顺序错误,就把他们交换过来。就比如一个一个无序数列:5,8,6,3,9,2,1,7,从小到大排一次序,按照冒泡排序的思想,我们把相邻的元素两两进行比较,根据大小交流元素的位置。过程如下:
#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
int a[maxn],x;
void bubble_sort(int n){//n为数组的长度
for(int i=0;i<n;i++){
for(int j=0;j<n-i-1;j++){//这个n-i-1是因为在第一轮冒泡循环后,最大的已经排到了最后。
if(a[j]>a[j+1]){//从大到小排序。
int temp=a[j];//定义一个中间变量来使两个元素互换
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main(){
cin>>x;//输入要几个数排序。
for(int i=0;i<x;i++){
cin>>a[i];
}
bubble_sort(x);
for(int i=0;i<x;i++){
cout<<a[i]<<" ";
}
return 0;
}
结果如下:
难点理解:
这里的j<n-i-1;为什么?
因为冒泡排序有一个特点,这个程序是从大到小排序,所以第一轮排序以后,最大的数就会浮到最右面;第二轮排序以后,第二大的数会浮到倒数第二个位置;第三轮排序以后,第三大的数会浮到倒数第三个位置……
也就是说,排序多少轮,就有多少个数字已经按排序要求排好了,它们不需要再比较。
写 j<n–1 也可以,只不过程序在执行时多做了许多无用功。
2.插入排序:
插入数组的思路和打扑克牌时排列手牌的方法相似,比如,我们现在单手拿牌,然后将牌从左到右,由大到小进行排序,此时,我们需要将一张牌抽出来,分别插入到前面已经安排好的手牌的适当位置,重复这一操作,直到插入最后一张牌,就排好了。
比如:2,5,1,3,6,由小到大排序
#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
int a[maxn],x;
void insert_sort(int n){
int j,temp;
for(int i=1;i<n;i++){
temp=a[i];
j=i-1;
while(j>=0&&a[j]>temp){//向前一个一个判断有没有比它大的数
a[j+1]=a[j];
j--;
}
a[j+1]=temp;//找到它应该在的位置交换
}
}
int main(){
cin>>x;//x个数进行排序
for(int i=0;i<x;i++){
cin>>a[i];
}
insert_sort(x);
for(int i=0;i<x;i++){
cout<<a[i]<<" ";
}
return 0;
}
3.sort排序:
sort是一个能把数组从小到大排序的函数。
#include<bits/stdc++.h>
using namespace std;
int main(){
int x;
cin>>x;
int a[x];
for(int i=0;i<x;i++) cin>>a[i];
sort(a,a+x);
for(int i=0;i<x;i++) cout<<a[i]<<" ";
return 0;
}
sort 排序简单明了。
拿走不谢。