当前位置:   article > 正文

c++十大排序——冒泡排序_c++冒泡排序

c++冒泡排序

算法基本知识铺垫

有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下:

1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序

2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。

3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储 空间进行比较和交换的数据排序。

4、非原地排序:需要利用额外的数组来辅助排序。

5、时间复杂度:一个算法执行所消耗的时间。

6、空间复杂度:运行完一个算法所需的内存大小

十大排序一览图

十大排序中的稳定排序

冒泡排序(bubble sort) — O(n2)

插入排序 (insertion sort)— O(n2)

归并排序 (merge sort)— O(n log n)

十大排序中的非稳定排序

     面试考察中一般问快排,选择,希尔,堆这几种非稳定排序

选择排序 selection sort)— O(n2)

希尔排序 (shell sort)— O(n log n)

堆排序 (heapsort)— O(n log n)

快速排序 (quicksort)— O(n log n)

冒泡排序思想

将第一个元素和第二个元素进行比较,若为逆序则将两个元素交换,然后比较第二个元素和第三个元素。依次类推,直至第 n-1个元素和第 n个元素进行比较为止。上述过程称为第一趟冒泡排序,其结果使最大值元素被放置在最后一个位置(第 n个位置)。然后进行第二趟冒泡排序,对前 n-1个元素进行同样操作,其结果是使第二大元素被放置在倒数第二个位置上(第 n-1个位置)。

冒泡排序图解

黄色表示已排序部分,蓝色表示未排序部分。

代码实现 

  1. #include<iostream>
  2. using namespace std;
  3. //-------------------普通冒泡排序算法--------------
  4. void mySwap(int &a, int &b) {
  5. int temp = a;
  6. a = b;
  7. b = temp;
  8. }
  9. void bubbleSort(int arr[],int length)
  10. {
  11. for (int i = 0; i < length-1 ; i++){
  12. for (int j = 0; j < length-1 - i; j++){
  13. if(arr[j]>arr[j+1]){
  14. int temp;
  15. temp = arr[j];
  16. arr[j] = arr[j + 1];
  17. arr[j + 1] = temp;
  18. //mySwap(arr[j], arr[j + 1]);
  19. //直接自己写的mySwap交换函数也可以,就当自己练习引用传递了
  20. }
  21. }
  22. }
  23. }
  24. //-----------------优化冒泡排序------------记录每轮是否进行过交换
  25. void bubbleSort_better(int arr[], int length)
  26. {
  27. bool isSorted = false;
  28. for (int i = 0; i < length - 1; i++){
  29. isSorted = false;
  30. for (int j = 0; j < length - 1 - i; j++){
  31. if (arr[j] > arr[j + 1]){
  32. int temp = arr[j];
  33. arr[j] = arr[j + 1];
  34. arr[j + 1] = temp;
  35. //mySwap(arr[j], arr[j + 1]);
  36. //直接自己写的mySwap交换函数也可以,就当自己练习引用传递了
  37. isSorted = true;
  38. }
  39. }
  40. if (isSorted) break;
  41. }
  42. }
  43. int main()
  44. {
  45. int arr[] = { 9,1,2,3,4,5,6,7,8 };
  46. int length = sizeof(arr) / sizeof(arr[0]);
  47. //bubbleSort(arr,length);;
  48. bubbleSort_better(arr, length);
  49. for (int i=0;i<9;i++)
  50. {
  51. cout << arr[i] << ' ';
  52. }
  53. return 0;
  54. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/281920
推荐阅读
相关标签
  

闽ICP备14008679号