1. 冒泡法
第一轮
如图所示,对数组相邻的两个元素进行两两比较,每次比较,让小的数字往上移动。在第一轮的比较中,首先16与25比较,16小于25,交换位置,即16往上冒,然后16和9比较,16大于9,不交换,再9和90比较,9小于90,交换,最后,9和23比较,9小于23,交换,经过第一轮,最小值9冒到了最上面,总共进行了4次比较;
第二轮
同理,接下来进行第二轮的比较,首先比较25和16,25大于16,不交换,然后比较16与90,16小于90,交换,然后比较16与23,16小于23,交换,因为9是最小的,已经在最上面,故在第二轮的不需要比较16与9,第二轮中总共比较3次;
同理,第三轮比较2次,第4轮比较1次,结束。
#include <iostream>
using namespace std;
int main()
{
/**************************************************************冒泡法排序*/
int temp = 0;
int Num[5] = {15,25,6,18,4};
//控制轮数
for (int i=0; i<5-1; i++)
{
//每轮比较并交换位置
for (int j=0; j<5-i-1; j++)
{
if (Num[j] > Num[j+1])
{
temp = Num[j];
Num[j] = Num[j+1];
Num[j+1] = temp;
}
}
}
for (int i=0; i<5; i++)
{
cout << Num[i] << endl;
}
return 0;
}
2. 选择法
第一轮比较,寻找5个数据中的最小值及其索引,与数组第一个值交换位置;
第二轮比较,寻找后4个数据的最小值及其索引,与数组第二个值交换位置;
第三轮比较,寻找后3个数据的最小值及其索引,与数组第三个值交换位置;
第四轮比较,寻找后2个数据的最小值及其索引,与数组第四个值交换位置;结束。
#include <iostream>
using namespace std;
int main()
{
/*************************************************************选择法排序*/
int Num[] = {45,68,25,13,78,66};
int numLength = sizeof(Num)/sizeof(int);
int temp = 0;
int numMax;
int indexMax;
for (int i=0; i<numLength-1; i++)
{
numMax = Num[i];
indexMax = i;
for (int j=i+1; j<numLength; j++)
{ //寻找最大值及其索引
if (numMax < Num[j])
{
numMax = Num[j];
indexMax = j;
}
}
// 交换位置
temp = Num[i];
Num[i] = Num[indexMax];
Num[indexMax] = temp;
}
for (int i=0; i<numLength; i++)
{
cout << Num[i] << endl;
}
return 0;
}