介绍
快速排序算法的思想是通过一个哨兵元素,将所有比这个哨兵元素小的放在一边,比哨兵元素大的放在另一边,然后在分别对两边的元素进行排序。
从这段简单的描述中我们可以看出,快速排序算法有分治的思想在里面。
算法实现
给定一个无序的数组:
int[] arr = {72,6,57,88,60,42,83,73,48,85};
1、默认第一的元素为哨兵,此时哨兵为pivos=72
2、定义两个指针,low 和high,low 指向数组的0号位,high指向数组的length-1位,也就是最后一位。
3、移动两个指针,将右指针向左移动查找小于哨兵的元素,当找到时停止移动,左指针向右移动找到大于哨兵的元素,找到时停止移动,交换两个元素的值,直到两个指针相遇,然后此时将哨兵元素填入指针相遇的地方,到此时,哨兵元素左侧为比哨兵元素小的序列,右侧为比哨兵元素大的序列。
4、然后再将左右两个序列分别重复此过程,直到排好序
public static void main(String[] args) {
int[] arr = {72,6,57,88,60,42,83,73,48,85};
System.out.println("初始数组:"+Arrays.toString(arr));
quickSorted(arr);
System.out.println(Arrays.toString(arr));
}
public static void quickSorted(int [] items){
int low=0;
int high=items.length-1;
quickSorted(items,low,high);
}
public static void quickSorted(int[] items,int low,int high){
if (low<high){
int partions = partions(items, low, high);
quickSorted(items,low,partions-1);
quickSorted(items,partions+1,high);
}
}
public static int partions(int[] items,int low,int high){
int temp=items[low];
int i=low;
int j=high;
while (i<j){
while (items[j]>temp&&i<j){
j--;
}
if (i<j){
items[i]=items[j];
i++;
}
while(items[i]<temp&&i<j){
i++;
}
if (i<j){
items[j]=items[i];
j--;
}
}
items[i]=temp;
return i;
}