Java排序算法之快速排序
快速排序是基于交换的排序算法
- 快速排序算法的实现
快速排序是一种分区交换排序算法,是冒泡排序的改进,其采用了分治策略,将问题划分成若干个规模更小但和原问题相似的子问题,然后用递归方法解决了这些子问题,最终将它们组合成员问题的解。
快速排序将要排序的序列分成独立的两部分,其中一部分的关键字都比另一部分的关键字值大,然后分别对这两部分进行快速排序,排序过程递归进行,整个序列最终达到有序。
- 算法性能分析
- 时间复杂度
O (nlogn) - 空间复杂度
O (log2n) - 算法稳定性
不稳定
- Java代码的实现
import java.util.Scanner;
/**
* 快速排序
*
* @author Dell
*
*/
public class QuickSort {
public static void QuickSort(int[] a,int low,int higt){
int temp ;
if (low>higt) {
return;
}
int i = low;
int j = higt;
int index = a[low]; //第一个元素作为支点
//终止坐标大于起始坐标 从顺序表的两端交叉扫描
while (i<j) {
//从后向前找大于基数的数
while (i<j && a[j]>=index) {
j--;
}
//从前向后找小于基数的数
while (i<j && a[i]<=index) {
i++;
}
//将找到的两个数据进行交换
if (i<j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
//将最小的数放到第一个位置
a[low]=a[i];
a[i]=index;
//采用递归的方法对两部分进行排序
QuickSort(a,low,j-1);
QuickSort(a,j+1,higt);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请从键盘输入数据的个数:");
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < a.length; i++) {
a[i] = sc.nextInt();
}
System.out.println();
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"\t");
}
System.out.println();
// int point = a[0];
int low = 0;
int higt = a.length-1;
QuickSort(a,0,a.length-1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"\t");
}
}
}