從左向右依次遞迴 如果 陣列中的元素都相等,就會變成 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的部分近乎平均的分配在左右兩側,避免了該問題...