C 實現快速排序 雙路快速排序 三路快速排序

2021-10-19 11:25:29 字數 4408 閱讀 1985

從左向右依次遞迴 如果 陣列中的元素都相等,就會變成 n²級別的複雜度演算法

public class quicksort

public static void sort(t arr) where t : system.icomparable

public static void sort2(t arr) where t : system.icomparable

private static void sort(t arr, int l, int r ,system.random random) where t : system.icomparable

private static void sort2(t arr, int l, int r,system.random random) where t : system.icomparable

int p = partition(arr, l, r, random);

sort(arr, l, p - 1,random);

sort(arr, p + 1, r,random);

}private static int partition(t arr, int l, int r,system.random random) where t : system.icomparable

}swap(arr, l, j);

return j;

}private static void swap(t arr, int i, int j) where t : system.icomparable

public static void insertionsort(t data, int l, int r) where t : system.icomparable

else

}data[j] = temp;}}

};

左右依次遍歷 就能避免這種問題

雙路排序演算法

public class quicksort

public static void sort(t arr) where t : system.icomparable

public static void sort2(t arr) where t : system.icomparable

private static void sort(t arr, int l, int r, system.random random) where t : system.icomparable

private static void sort2(t arr, int l, int r, system.random random) where t : system.icomparable

int p = partition(arr, l, r, random);

sort(arr, l, p - 1, random);

sort(arr, p + 1, r, random);

}private static int partition(t arr, int l, int r, system.random random) where t : system.icomparable

}swap(arr, l, j);

return j;

}private static void swap(t arr, int i, int j) where t : system.icomparable

public static void insertionsort(t data, int l, int r) where t : system.icomparable

else

}data[j] = temp;}}

public static void sort2ways(t arr) where t : system.icomparable

private static void sort2ways(t arr, int l, int r, system.random random) where t : system.icomparable

int p = partition2ways(arr, l, r, random);

sort(arr, l, p - 1, random);

sort(arr, p + 1, r, random);

}private static int partition2ways(t arr, int l, int r, system.random random) where t : system.icomparable

while (j >= i && arr[j].compareto(arr[l]) > 0)

if (i >= j)

swap(arr, i, j);

i++;

j--;

}swap(arr, l, j);

return j;

}};

三路快速排序

public class quicksort

public static void sort(t arr) where t : system.icomparable

public static void sort2(t arr) where t : system.icomparable

private static void sort(t arr, int l, int r, system.random random) where t : system.icomparable

private static void sort2(t arr, int l, int r, system.random random) where t : system.icomparable

if (l >= r)

int p = partition(arr, l, r, random);

sort2(arr, l, p - 1, random);

sort2(arr, p + 1, r, random);

}private static int partition(t arr, int l, int r, system.random random) where t : system.icomparable

}swap(arr, l, j);

return j;

}private static void swap(t arr, int i, int j) where t : system.icomparable

public static void insertionsort(t data, int l, int r) where t : system.icomparable

else

}data[j] = temp;}}

public static void sort2ways(t arr) where t : system.icomparable

private static void sort2ways(t arr, int l, int r, system.random random) where t : system.icomparable

int p = partition2ways(arr, l, r, random);

sort2ways(arr, l, p - 1, random);

sort2ways(arr, p + 1, r, random);

}private static int partition2ways(t arr, int l, int r, system.random random) where t : system.icomparable

while (j >= i && arr[j].compareto(arr[l]) > 0)

if (i >= j)

swap(arr, i, j);

i++;

j--;

}swap(arr, l, j);

return j;

}public static void sort3ways(t arr) where t : system.icomparable

private static void sort3ways(t arr, int l, int r, system.random random) where t : system.icomparable

private static (int, int) partition3ways(t arr, int l, int r, system.random random) where t : system.icomparable

else if (arr[i].compareto(arr[l]) == 0)

else if (arr[i].compareto(arr[l]) > 0)

}swap(arr, l, lt);

// arr[l, lt-1] v

return (lt-1, gt);

}};

快速排序之三路快速排序

之前介紹了快速排序和優化版的快速排序 下面再來介紹一種 三路快速排序 實現 三路快速排序 template typename t static void quicksort3ways t arr,int n template typename t static void quicksort3ways...

9 5 三路快速排序演算法

外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img ite3pzje 1610469861174 c0cea802827c4c1d86a9e54022cd6e42 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img cdnyb47s 1610469861177 d4a...

雙路快速排序

雙路快速排序的時間複雜度為o nlog2n 空間複雜度為o n 雙路快速排序的核心思想 單路快排會將等於v的元素分配在左側或者右側,當陣列中有大量重複元素時,這將會導致左右兩側的元素數量極度不均衡,時間複雜度退化到o n 2 如下圖所示 雙路快排是將等於v的部分近乎平均的分配在左右兩側,避免了該問題...