码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法总结

时间:2016-07-13 11:50:41      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

1、冒泡排序

     

技术分享
//冒泡排序
      void bubbleSort(int A[], int n)
      {
          bool flag = false;
          for (int i = n - 1; i > 0; i--)
          {
              //注意i,j的终止条件
              for (int j = 0; j < i; j++)
              {
                  if (A[j]>A[j + 1])swap(A[j], A[j + 1]);
                  flag = true;
              }

              if (flag == false)return;
          }

      }
View Code

    

最差时间复杂度 O(n²) 记录是反序的,需要n-1次扫描,每趟扫描进行n-i次比较,每次比较都要移动3次

最优时间复杂度 O(n) 记录是正序的,一趟扫描即可完成,比较n-1次

平均时间复杂度 O(n²)

虽然冒泡排序不一定进行n-1趟,但记录移动次数多,故平均时间性能比直接插入排序差

最差空间复杂度 O(1)

优点:稳定;

缺点:慢,每次只能移动相邻两个数据

 

2、插入排序

     

技术分享
//插入排序
      void insertSort(int A[], int n)
      {
          for (int i = 1; i < n; i++)
          {
              //注意j从i-1开始
              for (int j = i - 1; j >= 0;j--)
              if (A[i] < A[j])
                  swap(A[i], A[j]);
          }
      }
View Code

 

 

最差时间复杂度 O(n²)最优时间复杂度 O(n)平均时间复杂度 O(n²)最差空间复杂度 O(n) total, O(1) auxiliary

 

3、希尔排序

 

技术分享
//希尔排序
      void shellSort(int A[], int n)
      {
          int incrment = n;
          do{
              incrment = n / 3 + 1;
              shellPass(A, n, incrment);
          } while (n >= 1);
      }
      void shellPass(int A[], int n, int d)
      {
          for (int i = d; i < n;i++)
          for (int j = i - d; j >= 0 && A[j]>A[i]; j -= d)//注意j每次自减d,A[j]>A[i]放在判断条件效率更高
          {
              swap(A[i], A[j]);
          }
      }
View Code

希尔排序实际上是一种插入排序, 它的时间复杂度和数组初始排序有关。

平均时间复杂度:O(nlogn)

空间复杂度:O(1)

优点:快,数据移动少;

缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取。

 

 

排序算法总结

标签:

原文地址:http://www.cnblogs.com/573177885qq/p/5666252.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!