[034] 几种排序算法的C++实现

1、代码

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int arr[5] = {2, 10, 7, 32, 24};
    //计算数组元素个数
    int leng = sizeof(arr) / sizeof(arr[0]);

    //內嵌的排序函数sort,但需要包含头文件algorithm
    sort(arr, arr + 5);
    cout << "(函数实现)sort_arr: ";
    for (int i = 0; i < leng; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    //选择排序(复杂度N²)
    //数组第一个位置的数与后面所有位置的数做比较,只要比它小,就互换位置,经过一轮比较,最小的数就排在了第一位。同样的方法再排第二位,第三位。。。。
    arr[0] = 2;
    arr[1] = 10;
    arr[2] = 7;
    arr[3] = 32;
    arr[4] = 24;
    for (int i = 0; i < leng - 1; i++)
    {
        for (int j = i + 1; j < leng; j++)
        {
            if (arr[j] < arr[i])
            {
                int swap = arr[i];
                arr[i] = arr[j];
                arr[j] = swap;
            }
        }
    }
    cout << "(选择排序)Select_sort_arr: ";
    for (int i = 0; i < leng; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    //冒泡排序(复杂度N²)
    //从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以排序的最大元素上浮到右侧
    arr[0] = 2;
    arr[1] = 10;
    arr[2] = 7;
    arr[3] = 32;
    arr[4] = 24;
    int Bubble = 0;
    while (Bubble == 0)
    {
        for (int i = 0; i < leng - 1; i++)
        {
            Bubble = 1;
            if (arr[i] > arr[i + 1])
            {
                int swap = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = swap;
                Bubble = 0;
            }
        }
    }

    cout << "(冒泡排序)Bubble_sort_arr: ";
    for (int i = 0; i < leng; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    //插入排序(复杂度N²)
    //按顺序从数组中提取数值key,如果key比前一个数小,就把key插到这个数前面,同时key再与前面的作比较,再继续插入。
    arr[0] = 2;
    arr[1] = 10;
    arr[2] = 7;
    arr[3] = 32;
    arr[4] = 24;
    for (int i = 1; i < leng; i++)
    {
        int key = arr[i];
        while (i > 1 && key < arr[i - 1])
        {
            arr[i] = arr[i - 1];
            arr[i - 1] = key;
            i--;
        }
    }
    cout << "(插入排序)insert_sort_arr: ";
    for (int i = 0; i < leng; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    //希尔排序(复杂度n^(3/2))
    //希尔排序是插入排序的改良版,就是在插入排序之前对数组做预处理分组,而且是两两分组,而这两个元素之间的跨度,称为希尔排序的增量,通过调整增量,最后增量为1,排序完成
    arr[0] = 2;
    arr[1] = 10;
    arr[2] = 7;
    arr[3] = 32;
    arr[4] = 24;
    int gap = leng / 2;
    while (gap >= 1)
    {
        for (int i = gap; i < leng; i++)
        {
            if (arr[i - gap] > arr[i])
            {
                int swap = arr[i - gap];
                arr[i - gap] = arr[i];
                arr[i] = swap;
            }
        }
        gap = gap/2;
    }

    cout << "(希尔排序)Shell_sort_arr: ";
    for (int i = 0; i < leng; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

2、运行结果

(函数实现)sort_arr: 2 7 10 24 32
(选择排序)Select_sort_arr: 2 7 10 24 32
(冒泡排序)Bubble_sort_arr: 2 7 10 24 32
(插入排序)insert_sort_arr: 2 7 10 24 32
(希尔排序)Shell_sort_arr: 2 7 10 24 32

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值