一、什么是快速排序
快速排序是对冒泡排序的一种改进,通过多次比较和交换来实现排序。
首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边
二、时间复杂度
快速排序的最优情况时间复杂度为o (logn)
最差情况为冒泡排序的时间复杂度o(n^2)
三、配图
首先有一个数组
选用第一个数作为关键数
比较数组中的数据与关键数的关系,小于关键数放左边,大于关键数放右边
左右侧再独立排序
四、主要代码(java形式)
public static int[] qsort(int arr[],int start,int end) {
int pivot = arr[start];
int i = start;
int j = end;
while (i<j) {
while ((i<j)&&(arr[j]>pivot)) {
j--;
}
while ((i<j)&&(arr[i]<pivot)) {
i++;
}
if ((arr[i]==arr[j])&&(i<j)) {
i++;
} else {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
if (i-1>start) arr=qsort(arr,start,i-1);
if (j+1<end) arr=qsort(arr,j+1,end);
return (arr);
}
五、存在问题
快速排序并不是一个稳定的排序算法,最差情况下等同于冒泡排序
其他排序