20.选择排序和插入排序

2020-12-17  本文已影响0人  lxr_

//选择排序,每一轮选出新的最值,与上一个最值交换后依次从数组起始位置开始存放

//插入排序,每一轮选出一个值与前面的值比较,若从小到大排,若前面的值大则交换,否则不动,直到交换后这个值没有前面的值小,也没有后面的值大即可

#include<iostream>

using namespace std;

int main()

{

    int arr2[5] = { 300,350,200,400,250 };

    cout << sizeof(arr2)/sizeof(arr2[0])-1 << endl;

    //选择排序,升序

     for (int i = 0; i < sizeof(arr2)/sizeof(arr2[0])-1; i++)

    {

        int min = i;//设第一个数为最小值

        for (int j = i+1; j < sizeof(arr2) / sizeof(arr2[0]); j++)

        {

            if (arr2[min] > arr2[j])

            {

                min = j;//更新最小值位置

            }

        }

        //更新最小值

        int x = arr2[min];

        arr2[min] = arr2[i];

        arr2[i] = x;

    }*/

    //插入排序,升序

    cout << "插入排序" << endl;

    for (int i = 0; i < sizeof(arr2) / sizeof(arr2[0]) - 1; i++)

    {

        int j = i;

        while (j >= 0 && arr2[j + 1] < arr2[j])//一定要先判断j在判断前后的值,否则当j=-1时,会出现访问数组的错误

        {

            int x = arr2[j + 1];

            arr2[j + 1] = arr2[j];

            arr2[j] = x;

            j--;

        }

    }

    for (int i = 0; i < sizeof(arr2) / sizeof(arr2[0]); i++)

    {

        cout << arr2[i] << endl;

    }

    system("pause");

    return 0;

}

上一篇 下一篇

猜你喜欢

热点阅读