*PS:整理自小蓝课件qwq
选择排序
基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列的最前,直到全部待排序的数据元素排完
优:稳定
缺:慢
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n;
int a[100010];
void SelectSort()
{
for(int i=1;i<n;++i)
{
int k=i;
for(int j=i+1;j<=n;++j)
if(a[j]<a[k]) k=j;
if(k!=i) swap(a[i],a[k]);
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
SelectSort();
for(int i=1;i<=n;++i)
printf("%d ",a[i]);
return 0;
}
冒泡排序
从1到n依次比较相邻的两个数,把大的放前面,小的放后面。第一遍排序结束时,最小的一定排到最后。重复上述过程,仍从第1个数开始交换,直到交换到倒数第2个数……
由于在排序过程中总是大数往前,小数往后,相当气泡上升,所以叫冒泡排序。
优化:设置一个bool变量判断当前有无排好序。
优:稳定
缺:慢
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n;
int a[100010];
void Sort()
{
int l=n;
bool change;
do
{
change=false;
for(int i=1;i<l;++i)
if(a[i]<a[i+1])
{
swap(a[i],a[i+1]);
change=true;
}
--l;
}while(change);
}
int