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

我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。

  排序算法大体可分为两种:

    一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序选择排序插入排序归并排序堆排序快速排序等。

    另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序基数排序桶排序等。

下表给出了常见比较排序算法的性能:

为了便于以下描述,接下来全部算法的排序对象均为乱序数组int a[n];


  1. 冒泡排序(BubbleSort)

思路:对相邻的两个元素进行比较,这样每轮比较完当前最大(小)的元素就会移到尾部,如此重复n轮,便可实现排序。

实现:

 1 void bubbleSort(int a[],int begin,int end)
 2 {
 3   for(int i = begin;i<end;i++)
 4   {
 5     for(int j = i+1;j<end;j++)
 6     {
 7       if(a[i]>a[j])
 8       {
 9         std::swap(a[i],a[j]);
10       }
11     }
12   }
13 }

具体排序过程如图:

总结:

最简单排序算法,稳定,由于两层循环因此复杂度为O(n2)。(但是想到当年第一次找工作时被问到,结果不出所料没有答出来,真是让我觉得难堪的算法。)


本文参考:https://www.cnblogs.com/eniac12/p/5329396.html#s1

猜你喜欢

转载自www.cnblogs.com/Swetchine/p/11295657.html
今日推荐