数据结构与算法之排序(更新中。。。)

数据结构与算法之排序(更新中。。。)

冒泡排序

代码分析:

这段代码实现了冒泡排序算法,其时间复杂度为 O ( n 2 ) O(n^2) O(n2)。冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换的元素,也就是说该数列已经排序完成。

在这段代码中,bubbleSort函数中的外层循环执行了n次,内层循环执行了n-1次,因此总的时间复杂度为 O ( n 2 ) O(n^2) O(n2)。虽然冒泡排序的时间复杂度较高,但是它实现简单,对于小规模的数据排序效果还是不错的。

代码解读:

这段代码实现了冒泡排序算法。冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换的元素,也就是说该数列已经排序完成。

在这段代码中,swap函数实现了两个元素的交换,bubble函数实现了一次冒泡排序,bubbleSort函数则是对整个数组进行冒泡排序。其中,bubble函数返回一个布尔值,表示是否进行了交换操作,如果没有进行交换操作,说明数组已经排好序了,可以直接退出循环。

在main函数中,首先输出了原始数组,然后调用bubbleSort函数对数组进行排序,最后输出排序后的数组。可以看到,排序后的数组是按照从小到大的顺序排列的。

值得注意的是,这段代码中使用了模板类,可以对不同类型的数组进行排序。同时,使用了STL中的foreach函数,可以方便地对数组进行遍历输出。

#include <iostream>
#include <algorithm>

template<class T>
void swap (T& a, T& b)
{
    
    
    T temp = a;
    a = b;
    b = temp;
}

template<class T>
bool bubble (T a[], int n)
{
    
    
    bool swapped = false;
    for (int i = 0; i < n - 1; ++i)
    {
    
    
        if (a[i] > a[i+1])//如果数组已经是排序的话,则排序就终止了
        {
    
    
            swap(a[i], a[i+1]);
            swapped = true;
        }
    }
    return swapped;
}

template<class T>
void bubbleSort(T a[], int n)
{
    
    
    for (int i = n; i > 1 && bubble(a, i); --i); //最后只剩一个数字就是排好序的,故到a>1即可
}
void Show(const int& v)
{
    
    
    std::cout << v << " ";
}

int main()
{
    
    
    int arr[]{
    
     6, 5, 8, 4, 3, 1 };
    for (auto x : arr)
        std::cout << x << " ";
    //std::for_each(arr, arr + sizeof(arr) / sizeof(int), Show);
    std::cout << "\n";
    bubbleSort(arr, sizeof(arr) / sizeof(int));
    std::for_each(arr, arr + sizeof(arr) / sizeof(int), Show);
    std::cout << std::endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45541762/article/details/130694806
今日推荐