目录
一、快排是什么?
八大排序之一,主要采用的是分而治之的思想
二、思路步骤
1.确认分界点 x(轴数)
常用的三种
1.数组头的数作为分界点
2.数组尾的数作为分界点
3.数组中间的数作为分界点
2.调整区间
1.左边的是小于x的数
2.右边的是大于x的数
3.递归处理左右两边
三、代码实现 (以数组头为轴数)
1.主函数中调用快速排序算法
public static void main(String[] args) {
int [] array = {5,4,8,7,2,6,10};
//打印排序前的数组
print(array);
//调用快速排序算法
quick(array,0, array.length-1);
//打印快排后的数组
print(array);
}
2.快速排序函数
public static void quick(int [] array,int left,int right){
if(left>right){
return;
}
int pivot = array[left];
int i = left;
int j = right;
while(i != j){
while(array[j] >= pivot && i < j){
j--;
}
while(array[i] <= pivot && i < j){
i++;
}
//如果左边找到大于轴数的元素的索引值,指针停下,如果右边找到小于轴数的元素的索引值指针停下
//交换这两个元素
swap(array,i,j);
//交换后指针继续移动,直到两个指针相遇,交换指针相遇处的元素和轴数,需要再在外层套一个while循环
}
swap(array,i,left);
//轴数和指针相遇的数交换位置后,表明第一轮的快排结束,进行第二轮的快排,原理一样,用递归传入参数
//排第一轮轴数左边的数组
quick(array,left,i-1);
//排第一轮轴数右边的数组
quick(array,j+1,right);
}
3.交换数组中两个数的函数
public static void swap(int [] array,int a,int b){
int temp = array[a];
array[a] = array[b];
array[b] = temp;
}
4.打印数组内容
public static void print(int [] array){
for (int i : array) {
if(i!=array[array.length-1])
System.out.print(i+",");
else
System.out.print(i);
}
System.out.println();
}
总结
快速排序是分治思想的体现,先找到一个分界点,然后左边放入小的数,右边放入大的数,两边的数再找分界点,以此类推,递归调用,从而达到快速排序数组