算法(一)排序算法(选择排序、冒泡排序)

排序算法

选择排序

①.在未完成排序的部分选择最小(大)的数
②.将该数字与完成排序的部分下一个数交换位置(或者说是未完成部分的第一个)
③.重复①②直到排序完成

使用选择排序进行排序图解(从小到大)


①选择未完成排序部分的最小值(红色方框)

②与未完成部分的第一个进行交换

③此时排序未完成,重复上面的步骤

后续步骤图解如下:

选择排序代码

#include<iostream>
using namespace std;
int main()
{
    int len =8;
    int a[8]={6,3,5,2,1,8,4,7};//初始化数组
    /*int a[len];//随机生成数组
    for(int i=0;i<len;i++)
    {
        a[i]=rand()%len;
    }*/
    cout<<"初始状态:";
    for(int i =0;i<len;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    for(int i=0;i<len;i++)//i为此时未完成排序部分的第一个,每次的最小值与他进行交换
    {
        int min=0xfffffff;
        int index = i;
        for(int j=i;j<len;j++)//找到最小值的下标
        {
            if(a[j]<min)
            {
                index=j;
                min=a[j];
            }
        }
        int temp = a[index];//i和index位置交换
        a[index] = a[i];
        a[i] = temp;
        for(int i =0;i<len;i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

运行结果

冒泡排序

冒泡排序就是数字像水中的气泡一样在向上的过程中逐渐变大(小),所以叫冒泡排序
①比较两个数的大小,如果这两个数排序不正确则交换位置
②将该进行比较的数字区域移向下一个位置,重复①直到到达已经排序好的部分。
③重复步骤①②直到全部排序完成

使用冒泡排序进行排序图解(从小到大)


①比较两个数的大小,因为是从小到大排序,而3却在6的右边,所以交换两个的位置

②将比较区域移向下一个位置重复①

经过这一次循环后8已经在他正确的位置。重复①②直到排序完成。

冒泡排序代码

#include<iostream>
using namespace std;
int main()
{
    int len =8;
    int a[8]={6,3,5,2,1,8,4,7};
    /*int a[len];
    for(int i=0;i<len;i++)
    {
        a[i]=rand()%len;
    }*/
    for(int i = len-1;i>0;i--)//i为已经排序好的位置,每次排序好一个数字所以i=i-1
    {
        for(int j=0;j<i;j++)//每次的比较区域为j和j+1,直到i
        {
            if(a[j]>a[j+1])
            {
                int temp = a[j+1];
                a[j+1] = a[j];
                a[j] = temp;
            }
        }
    }
    for(int i =0;i<len;i++)
    {
        cout<<a[i]<<" ";
    }
    return 0;
}

本人水平有限,如有错误欢迎指正。
-)!!!markdown还不是很会用。这怎么调图片大小啊...一

posted @ 2022-03-23 13:58  lemon豆奶  阅读(100)  评论(0)    收藏  举报