快速排序

比较排序的一种,其实快速排序是基于 “二分” 的思想。快速排序之所比较快,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点

的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。


快速排序:

时间复杂度 O(nlogn) 空间复杂度O(logn) 不稳定 【两个时间复杂度O(nlogn) 的排序算法都不稳定】

由于关键字的比较和交换是跳跃进行的,因此,快速排序是一种不稳定的排序方法。

最坏 O(n^2) ,最好 O(n) 

空间复杂度:递归造成的栈空间的使用,最好情况,递归树的深度logn 空间复杂的logn,最坏情况,需要进行n‐1 递归调用,其空间复杂度为 O(n)

平均情况,空间复杂度也为O(log2n)

int partition(int A[], int begin, int end){
             int i = begin;
             int j = end;
             int q;
             int pivot = begin;
             int pivotnumber = A[pivot];
             while(i!=j){
                   int temp;
                   while(A[j]>pivotnumber && i<j){
                        j--;

                  }
                   while(A[i]<=pivotnumber && i<j)
                  {
                        i++;
                  }
                  temp = A[i];
                  A[i] = A[j];
                  A[j] = temp;
            }

             if(i == j){
                   int temp;
                  temp =A[pivot];
                  A[pivot] = A[i];
                  A[i] = temp;      
            }
             return i;
      }
 void sort(int A[], int begin,int end){
             if(begin<end){
                   int q;
                  q = partition(A,begin, end);
                  sort(A,begin, q-1);
                  sort(A,q+1,end);
            }     
      }
int main() {
             int array[] = {8,7,1,6,5,4,3,2};
             sort(array, 0, 7);
             for(int i=0;i<array.length;i++){
                  cout<< array[i]<<" ";
            }
      }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值