數據結構排序之快速排序

一、快速排序思想

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();
	}
}


發佈了39 篇原創文章 · 獲贊 16 · 訪問量 9276
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章