-
冒泡排序
-
冒泡法排序概念:
通过遍历一维数组,比较相邻元素大小,若大小关系合适就不改变数组顺序,若大小关系错误,就互换该相邻元素,直到数组元素满足从小到大或从大到小的顺序。
-
冒泡法按从小到大顺序排序的步骤:
1、我们假设数组第一个值(a[0])为整个数组最小值。
2、比较第一个元素 (a[0])和第二个元素(a[1])大小,若a[0]<=a[1],则比较第二个 元素与第三个元素大小;若a[0]>a[1],则交换其位置,然后再比较第二和第三个元素大 小。
3、依次类推,完成第一轮比较,此时最后一个元素就是整个数组的最大值。
4、进行第二轮比较,依次比较第一个元素到倒数第二个元素大小,确定第二大的值。
5、以此类推,完成所有元素的排序。 -
代码实现:
{ //输入十个数字
int temp;
int a[10] = {};
cout << "请输入十个数字:";
for (int b = 0; b < 10; b++)
{
cin >> a[b];
}
//双循环排序
for (int i = 0; i < 10; i++) //共有10轮排序
{
for (int j = 0; j < 9 - i; j++) //每一轮分别确定该轮排序的最大值
{
if (a[j] > a[j + 1]) //若相邻两元素不按从小到大顺序排列,则交换其位置。
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
//输出完成排序的数组
for (int i = 0; i < 10; i++)
{
cout << a[i] << endl;
}
}
-
选择排序
-
选择排序的概念:
第一次从待排序数组中挑选最小值(或最大值)放在数组第一位,第二次选择剩下元素的最小值(或最大值)放在第二位,依次玩成所有排序。 -
选择排序的 步骤:
1、假设数组第一个元素是最小值,取其下标为最小值索引。
2、依次比较其余元素与第一个元素大小,若其余某个元素小于第一个元素,取其下标作为最小值索引。依次完成所有元素的比较。
3、若最小值索引不是0,交换最小值与第一个元素位置。
4、根据上面方法从剩余元素中选取最小值放在第二个位置。
5、依次完成所有排序。 -
代码实现:
{
int a[10] = {};
//输入一个具有十个元素的数组
cout << "请输入十个整数:" << endl;
for (int i = 0; i < 10; i++)
{
cin >> a[i];
}
//选择排序
for (int i = 0; i < 9; i++)
{
int temp;
int minidx = i; //确定每轮排序的最小值索引(第i轮就设第i个元素下标为最小值索引)
for (int j = i + 1; j < 10; j++)
{ //若有元素比a[minidx] 小,则该元素下标为最小值索引
if (a[minidx] > a[j])
{
minidx = j;
}
}
if (minidx != i) //若最小值索引数值发生改变,交换a[i]与最小值位置
{
temp = a[i];
a[i] = a[minidx];
a[minidx] = temp;
}
}
//输出完成排序的数组
for (int i = 0; i < 10; i++)
{
cout << a[i] << endl;
}
- 比较冒泡排序与选择排序
1、 冒泡排序中若元素大小顺序只要不对就要进行元素位置互换,而选择 排序每轮只根据最小值索引交换一次或不进行交换。
2、冒泡排序直接根据数值去决定位置,而选择排序根据下标、索引交换元素。
3、选择排序直接寻找最小值(最大值)放到数组首位(末尾)。
**望各位批评指正,谢谢 **