快速排序

来源:互联网 发布:房地产动画制作软件 编辑:程序博客网 时间:2024/06/03 17:04

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

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


快速排序:

时间复杂度 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]<<" ";            }      }