冒泡法、选择法排序原理及C++实现

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}
发布了16 篇原创文章 · 获赞 11 · 访问量 652

猜你喜欢

转载自blog.csdn.net/qq_42820853/article/details/103751163