1. 程式人生 > >java算法面試題:設計一個快速排序。雙路快速排序,簡單易於理解。

java算法面試題:設計一個快速排序。雙路快速排序,簡單易於理解。

面試題 != ava 思路 add bubuko 比較器 繼續 array

package com.swift;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class QuickSort {
    /*
     * 快速排序
     */

    public static void main(String[] args) {
        int[] strVoid = new int[] { 11, 66, 22, 0, 55, 2, 0, 11 };
        QuickSort sort 
= new QuickSort(); sort.quickSort(strVoid, 0, strVoid.length - 1); for (int i = 0; i < strVoid.length; i++) { System.out.println(strVoid[i] + " "); } // 用比較器排序 List<Integer> list = new ArrayList<Integer>(); for (Integer i : strVoid) { list.add(i); } Collections.sort(list,
new Comparator<Integer>() { @Override public int compare(Integer arg0, Integer arg1) { int num = arg1 - arg0; return num; } }); for (Integer i : list) { System.out.print(i + " | "); } }
void quickSort(int[] strDate, int left, int right) { int i, j, t, key; if (left > right) return; key = strDate[left]; // temp中存的就是基準數 i = left; j = right; while (i != j) { // 從後找比key小的或者等的放在key的左邊 while (strDate[j] > key && i < j) j--; // 從前找比key大的放在key的右邊 while (strDate[i] <= key && i < j) i++; // 小於就交換位置,等於就停止 if (i < j) { t = strDate[i]; strDate[i] = strDate[j]; strDate[j] = t; } } // 兩指針相等後,將第一個位置的值與相等處位置的值互換,完成第一輪排序 strDate[left] = strDate[i]; strDate[i] = key; quickSort(strDate, left, i - 1);// 繼續處理左邊的,這裏是一個遞歸的過程 quickSort(strDate, i + 1, right);// 繼續處理右邊的 ,這裏是一個遞歸的過程 } }

技術分享圖片

這是我的思路,應該屬於雙路快速排序的一種,快速排序的解決思路太多了,有單路、雙路、三路,每種的寫法也各有不同,每個人的思路都千奇百怪。

java算法面試題:設計一個快速排序。雙路快速排序,簡單易於理解。