码迷,mamicode.com
首页 > 其他好文 > 详细

排序算法

时间:2014-06-11 12:53:06      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   http   

一、插入排序

1.直接插入排序

算法稳定,时间复杂度为O(n^2),空间移动复杂度为O(n2)

如果序列是有序的,最好的时间复杂度为O(n)

bubuko.com,布布扣
void insertSort(int data[],int n)
{
  for(int i=1;i<n;i++)
  {
      int j = i - 1;
      int temp = data[i];
      while(j>=0&&data[j]>temp) 
     {
         data[j] = data[j-1];
         j--;
     }  
     data[j+1] = temp;  
  }    
}
bubuko.com,布布扣

2.折半插入排序

查找插入位置采用折半查找法。

算法稳定,时间复杂度为O(nlog2n),空间移动复杂度为O(n2)

bubuko.com,布布扣
void BinaryinsertSort(int data[],int n)
{
  for(int i=1;i<n;i++)
 {
      int left = 0;
      int right = i-1;
      int temp = data[i];
      while(left<=right)
      {
           int mid = (left+right)/2 ;
           if(data[mid]>temp)              //判断是否影响稳定性。
rigth = mid - 1;
else left = mid + 1; } for(int j=i-1;j>=left;j--) data[j+1] = data[j]; data[left] = temp; } }
bubuko.com,布布扣

3.希尔排序

将待排数据分组,组内进行直接插入排序。逐步减小分组数,最后再整体进行直接插入排序。

希尔排序的时间复杂度为介于O(nlog2n)与O(n*n)之间,大约为O(n1.3);

希尔排序算法是不稳定的。

二、交换排序

1.冒泡排序

时间复杂度为O(n*n),是稳定的排序算法。

2.快速排序

分治法的思想,最坏的情况是待排数据时有序的时候,此时会造成轴元素的一侧子序列的长度为0,另一侧的长度为n,此时时间复杂度为O(n*n)

空间复杂度主要是递归调用的栈的开销,最好的时候是O(logn),最坏的情况是O(n).

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

该算法是不稳定的。

三、选择排序

1.简单选择排序

时间复杂度为O(n*n),空间复杂度为O(1)

是不稳定为排序算法。

2.堆排序

最大堆的调整函数为shiftdown()函数。

每次最多执行O(logn)次数据的交换,所以其时间复杂度为O(nlogn).

空间开销是O(1).

该算法是不稳定的。

四、归并排序

最坏的情况下的时间发复杂度也为O(nlogn),算法是稳定的。

空间复杂度为O(n).

 

排序算法,布布扣,bubuko.com

排序算法

标签:style   class   blog   code   java   http   

原文地址:http://www.cnblogs.com/rickhsg/p/3772648.html

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