一、快速排序思想
1、对未排序的序列进行下标的分配,左指针low和右指针high分别指向最低和最高下标
![](https://img-blog.csdn.net/20151028204950055?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2、从序列右侧下标为high的元素开始,与标准元素60进行比较,若小于60,就将严肃放置在low指定的位置,并且将low向右移动一位
3、从序列左面下标为low的元素开始,与标准元素60进行比较,若大于60,就将元素放置在high指定的位置,并且将high向左移动一位
4、第一趟排序结果
5、第二趟开始
6、第三趟开始
7、最后结果
二、代码描述
package com.jlz.java;
import java.util.ArrayList;
import java.util.ListIterator;
public class Quick_Test1 {
/**
* @param args
*/
public static int position;
public static void main(String[] args) {
// TODO Auto-generated method stub
// 初始化列表
ArrayList<Object> arrayList = new ArrayList<Object>();
arrayList.add(60);
arrayList.add(55);
arrayList.add(48);
arrayList.add(90);
arrayList.add(36);
// 显示列表元素
Show(arrayList);
// 快速排序函数,low = 0,high = 列表元素个数-1
Quick(arrayList, 0, arrayList.size() - 1);
}
// 显示列表元素
public static void Show(ArrayList<Object> arrayList) {
// 运用迭代遍历,也可以直接遍历
ListIterator<Object> listIterator = arrayList.listIterator();
while (listIterator.hasNext()) {
System.out.print(" " + listIterator.next());
}
// 换行函数
Println();
}
// 快速排序函数,采用递归进行排序
public static void Quick(ArrayList<Object> arrayList, int low, int high) {
if (low < high) {
// 每趟排序结果
Show(arrayList);
// 标准元素的位置(下标)
position = Quick_Sort(arrayList, low, high);
// 标准元素左右进行递归快速排序
Quick(arrayList, low, position - 1);
Quick(arrayList, position + 1, high);
}
}
public static int Quick_Sort(ArrayList<Object> arrayList, int low, int high) {
// 获取标准关键字,默认为low指向的元素
int Key = (Integer) arrayList.get(low);
while (low < high) {
// 向左寻找小于标准关键字的元素
while (low < high && Key <= (Integer) arrayList.get(high))
high--;
if (low < high) {
// 用high指向元素替换low指向的元素
arrayList.set(low, (Integer) arrayList.get(high));
// low向右移动一位
low++;
}
// 下面类似
while (low < high && Key >= (Integer) arrayList.get(low))
low++;
if (low < high) {
arrayList.set(high, (Integer) arrayList.get(low));
high--;
}
arrayList.set(low, Key);
}
// 返回标准元素所在的下标
return low;
}
public static void Println() {
System.out.println();
}
}