1.基本介绍
基于交换思想的排序算法,采用了分治思想,适合数据量大、数据分布高度随机的情况。
2.算法步骤描述
1.从数列中取出一个数作为基准数(一般取数组第一个元素;
2.把数组进行左右划分,大于基准数的元素都移至基准数的右边,小于等于基准数的元素都移至基准数的左边;
3.再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素,排序完成。
3.时间复杂度和空间复杂度
时间复杂度的最坏情况O(N^2):
在最坏的情况下,待排序的序列为正序或者逆序,每次划分只得到一个比上一次划分少一个记录的子序列,注意另一个为空。
时间复杂度为 O(NlogN)的排序算法:
归并排序
快速排序
空间复杂度 :
主要是递归造成的栈空间的使用,最好情况,递归树的深度为log2n,其空间复杂度也就为O(logn),最坏情况,需要进行n‐1递归调用,其空间复杂度为O(n),平均情况,空间复杂度也为O(logn)。
4.代码
void Quick_sort(int left,int right,int arr[]){
if(left>=right)return;
int i,j,base,temp;
i=left,j=right;
base=arr[left];
while(i<j){
while(arr[j]>=base && i<j)j--;
while(arr[i]<=base && i<j)i++;
if(i<j){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
arr[left]=arr[i];
arr[i]=base;
Quick_sort(left,i-1,arr);
Quick_sort(i+1,right,arr);
}