简介:总的来说,排序算法共有八大类,即冒泡排序、选择排序、快速排序、插入排序、希尔排序、归并排序、基数排序以及堆排序等,本文另外也介绍了桶排序。编程语言使用了C/C++(其实主要用的C),3个经常出现的函数形参,arr - 待排序数组名(首元素地址)、bgn - 待排序数组起始排序元素位置(有时我们仅需要对数组中某一段元素进行排序,但通常bgn = 0,即arr首元素位置)、end - 待排序数组截止排序尾元素的下一个位置(即该位置无效,不可引用)。文中均已升序为例,降序原理相同。

  时间复杂度:描述该算法在处理大量数据时,总的来说其时间效率的参考;  稳定性:描述算法对原始序列处理前后,该序列相等大小的元素前后位置是否发生改变

  两个常用的函数:1、获取数组最大元素值; 2、交换两个整形元素。代码如下:

//获取整形数组的最大值
//NOTE: 默认arr非空
int getMaxValue(const vector<int> &arr)
{
    int max = INT_MIN;
    for (auto val : arr)
    {
        if (val > max)
            max = val;
    }
    return max;
}

/*交换两个整形值*/
void mySwap(int *pa, int *pb)
{
    int tmp = *pa;
    *pa = *pb;
    *pb = tmp;
}

 1、冒泡排序 - 依次比较相邻两元素,若前一元素大于后一元素则交换之,直至最后一个元素即为最大;然后重新从首元素开始重复同样的操作,直至倒数第二个元素即为次大元素;依次类推。如同水中的气泡,依次将最大或最小元素气泡浮出水面。

时间复杂度:O(N2  稳定性:稳定

/*冒泡排序*/
void bubbleSort(vector<int> &arr, int bgn, int end)
{
    /*isLoop用于指示依次遍历中是否发生元素交换,若没有,则已是有序数列,退出即可*/
    bool isLoop = true;
    for (int i = end; true == isLoop && i > bgn; --i)
    {
        isLoop = false;
        for (int j = bgn + 1; j < i; ++j)
        {
            if (arr[j] < arr[j - 1])
            {
                mySwap(&arr[j], &arr[j - 1]);
                isLoop = true;
            }
        }
    }
}
Code-冒泡排序

相关文章:

  • 2022-12-23
  • 2021-09-22
  • 2021-06-10
  • 2021-09-24
猜你喜欢
  • 2022-01-20
  • 2022-12-23
  • 2021-08-15
  • 2021-09-11
  • 2021-06-10
  • 2021-09-24
  • 2021-12-04
相关资源
相似解决方案