1.冒泡排序
按数组的脚码从小到大的顺序不断地比较,并将较大/较小的一方不断地向右转移,一遍又一遍的刷新就像是浑浊的水中砂石不断下沉,最终分层的一个过程。
#include<iostream>
using namespace std;
int main()
{
int a[105] = {0};
int n = 0, m = 0, i = 0, j = 0, k = 0;
cin >> n;//输入排序元素个数
for(i = 0; i < n; i++)//依次输入元素
cin >> a[i];
//冒泡:小<大
for(j = 0; j < n-1; j++)/*
每次内部的for完成一次大循环,
都会有一个大数沉淀到右端一共有n次大的循环*/
for(k = 0; k < n-j-1; k++)/*
两个两个不断向右推进,依次锁定两个数,
k由0到n-j-1时其中最大的数沉淀到最右端的一次刷新,
之所以是n-j-1,j就是因为沉淀的都沉到了后此时的倒数j位*/
{
if(a[k+1]<a[k])//负责比较这两个数的大小并调换顺序
{
m = a[k+1];
a[k+1] = a[k];
a[k] = m;
}
}
for(i = 0;i < n; i++)
cout << a[i] <<" ";//输出数组元素
return 0;
}
2.选择排序
直到今天我才分清什么是冒泡什么是排序,这两个实在是太像了。。。只要将冒泡略微修改一下就可以改为选择。
我以前一直都以为是冒泡来着。。。
#include<iostream>
using namespace std;
int main()
{
int a[105] = {0};
int n = 0, m = 0, i = 0, j = 0, k = 0;
cin >> n;//输入排序元素个数
for(i = 0; i < n; i++)//依次输入元素
cin >> a[i];
//选择:小<大
for(j = 0; j < n-1; j++)
for(k = j+1; k < n; k++)
{
if(a[j]>a[k])//负责比较这两个数的大小并调换顺序
{
m = a[j];
a[j] = a[k];
a[k] = m;
}
}
for(i = 0;i < n; i++)
cout << a[i] <<" ";//输出数组元素
return 0;
}
与冒泡不同的思想,冒泡是兄弟俩肩比着肩的比较然后排,选择是第一个数与其他所有数依次比较,符合条件就换,第二个数与它后面的数再依次比较。