这里我们开始复习排序的一些面试题。

  首先我们来看一下各个排序方法的时间复杂度和稳定性的比较,见下面表格:

      

排序法 平均时间 最差情形 稳定度 额外空间 备注
冒泡 O(n2)     O(n2) 稳定 O(1) n小时较好
交换     O(n2)     O(n2) 不稳定 O(1) n小时较好
选择 O(n2) O(n2) 不稳定 O(1) n小时较好
插入 O(n2) O(n2) 稳定 O(1) 大部分已排序时较好
基数 O(logRB) O(logRB) 稳定 O(n)

B是真数(0-9),

R是基数(个十百)

Shell O(nlogn) O(ns) 1<s<2 不稳定 O(1) s是所选分组
快速 O(nlogn) O(n2) 不稳定 O(nlogn) n大时较好
归并 O(nlogn) O(nlogn) 稳定 O(1) n大时较好
O(nlogn) O(nlogn) 不稳定 O(1) n大时较好

  选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,                               冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

 

    1.冒泡排序:

  算法原理:比较相邻的两个元素,如果第一个比第二个大,就交换他们两个,持续一直比下去,直到比完一轮,最后一个元素应该是最大的元素;之后再重新从首部开始比较,重复上述步骤,数字越来越少,直到没有足够一对的数字可以进行比较。

  代码实现:

  

 1 #include<iostream>
 2 using namespace std;
 3 void bubble_sort(int a[],int n){
 4     for(int i=0;i<n;i++)
 5     for(int j=0;j=n-1-i;j++){
 6         if(a[j]>a[j+1]){
 7             int temp=a[j];
 8             a[j]=a[j+1];
 9             a[j+1]=temp;
10         }
11     }
12 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-30
  • 2022-12-23
  • 2021-12-01
  • 2022-12-23
  • 2021-07-04
猜你喜欢
  • 2021-07-21
  • 2022-12-23
  • 2022-12-23
  • 2022-02-18
  • 2022-01-06
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案