一、快速排序思想
1、對未排序的序列進行下標的分配,左指針low和右指針high分別指向最低和最高下標
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();
}
}