如何根據直播場景選擇合適的直播協議?
阿新 • • 發佈:2021-07-13
快速排序法介紹:
快速排序(Quicksort)是對氣泡排序的一種改進。基本思想是:通過一趟排序將要排序的資料分割成獨立的兩
部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排
序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列
快速排序法示意圖:
快速排序法應用例項
import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class QuickSort { public static void main(String[] args) { //int[] arr = {-9,78,0,23,-567,70, -1,900, 4561}; //測試快排的執行速度 // 建立要給80000個的隨機的陣列 int[] arr = new int[8000000]; for (int i = 0; i < 8000000; i++) { arr[i] = (int) (Math.random() * 8000000); // 生成一個[0, 8000000) 數 } System.out.println("排序前"); Date data1 = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date1Str = simpleDateFormat.format(data1); System.out.println("排序前的時間是=" + date1Str); quickSort(arr, 0, arr.length-1); Date data2 = new Date(); String date2Str = simpleDateFormat.format(data2); System.out.println("排序前的時間是=" + date2Str); //System.out.println("arr=" + Arrays.toString(arr)); } public static void quickSort(int[] arr,int left, int right) { int l = left; //左下標 int r = right; //右下標 //pivot 中軸值 int pivot = arr[(left + right) / 2]; int temp = 0; //臨時變數,作為交換時使用 //while迴圈的目的是讓比pivot 值小放到左邊 //比pivot 值大放到右邊 while( l < r) { //在pivot的左邊一直找,找到大於等於pivot值,才退出 while( arr[l] < pivot) { l += 1; } //在pivot的右邊一直找,找到小於等於pivot值,才退出 while(arr[r] > pivot) { r -= 1; } //如果l >= r說明pivot 的左右兩的值,已經按照左邊全部是 //小於等於pivot值,右邊全部是大於等於pivot值 if( l >= r) { break; } //交換 temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; //如果交換完後,發現這個arr[l] == pivot值 相等 r--, 前移 if(arr[l] == pivot) { r -= 1; } //如果交換完後,發現這個arr[r] == pivot值 相等 l++, 後移 if(arr[r] == pivot) { l += 1; } } // 如果 l == r, 必須l++, r--, 否則為出現棧溢位 if (l == r) { l += 1; r -= 1; } //向左遞迴 if(left < r) { quickSort(arr, left, r); } //向右遞迴 if(right > l) { quickSort(arr, l, right); } } }