quicksort

    0熱度

    1回答

    我已經在Java中實現了所有四種排序算法。僅僅爲了它,我決定看看每個算法中的交換次數和比較次數。對於大小爲20的隨機排列,這裏是我的結果 冒泡排序:87個互換,87個比較 插入排序:87個互換,87個比較 選擇排序:19個互換,29個比較 快速排序:11940掉期,我甚至不知道在哪裏比較從 爲什麼氣泡排序和選擇排序相同?我的意思是看看我幾乎可以看到的代碼。循環幾乎相同,我只是想讓別人爲我指出。 我

    -1熱度

    1回答

    我發現這個函數是用python寫在互聯網上的,我很困惑,如果它是一個快速排序或不是因爲它被寫入一行而且它工作的很好很快,我認爲它與O(N * log n)的,即使在最壞情況下的複雜工作,所以這是代碼: def qsort(L): return (qsort([x for x in L[1:] if x < L[0]]) +\ L[0:1] + \ qsort(

    0熱度

    3回答

    當我嘗試運行下面的快速排序代碼時,它將無限循環。最後一次迭代將無限循環。 class QuickSort { public static void main(String[] args) { int arr[] = {10, 7, 8, 9, 1, 5,2}; QuickSort ob = new QuickSort(); ob.sort(arr, 0

    0熱度

    1回答

    我在Java中遇到了一個非常簡單的問題。我已經在java中實現了快速排序,可以處理arraylist,並且可以帶來任何價值。問題是它只適用於低於8000的大小的數組列表。 任何人都可以告訴我我的程序有什麼問題嗎?我認爲它可能與遞歸深度限制有關,但我不確定(因爲它有時適用於較大的尺寸,有時不適用)。我怎樣才能改進我的快速排序實現,以便它能像100000這樣的更大規模的Arraylist工作? imp

    0熱度

    2回答

    我正在學習算法第4期Robert Sedgewick的快速排序。 我想知道的快速排序代碼下面分區的長度爲N的一個陣列 private static int partition(Comparable[] a, int lo, int hi) { int i = lo, j = hi+1; while (true) { while (less(a[++i],

    1熱度

    1回答

    代碼確實運行。這是我正在研究的quicksort的一個不同的版本。我遇到了一些重大問題。首先,它將數組中的第一個元素打印爲n:例如(如果設置n = 3,即使您創建數組1中的第一個元素,比方說,它仍然會打印出3作爲第一個元素)。另外當你打印出排序後的版本時,它實際上並沒有改變任何東西。用正 實施例輸入= 3, 設定值= 8,7%,6 初始輸出將等於3,7,6 最終輸出將等於3,7,6 (輸出應該是6

    3熱度

    1回答

    我正在迭代實現自己的快速排序和遞歸。 它獲得第一個分區罰款,其中樞軸右側的數字大於和左側小於。 但是,我的分區似乎沒有劃分右側,只有左側。 int[] data = {3,5,2,7,11,9,1,88,22}; public void qSort(int[] data, int left, int right){ int pivot = partition(data,left,ri

    1熱度

    2回答

    我是Erlang的新手。我一直在對隨機的數字列表進行快速排序(我也有它只保留唯一的數字,所以重複列表不會顯示在排序列表中)。它工作正常,輸出給沒有重複的排序數字,但我一直在試圖讓它不僅輸出列表,而且長度列表也是我遇到錯誤的地方。 length(mod:func).將在erlang shell中給出列表的長度沒有問題,但是在快速排序的遞歸之後,我無法讓它工作。我試過分配變量並做了lists:appe

    0熱度

    1回答

    所以我的第一個問題是answered,它是有道理的。它能夠在排序後輸出一個列表長度,但最初我是在要求將io:format函數用於sort/0。但是我的下一個跟進,是如何在sort/1中使用它?我已經能夠解決這個問題了,但它是在遞歸時給它的,所以我得到了多行並且不正確。我的問題是,如何通過快速排序完成io:格式(還要注意,我也希望列表中沒有重複),所以我只得到長度的一行,而不是我得到的多行下面? 這

    0熱度

    1回答

    #include <stdio.h> #define ARRAY_SIZE 10 void lomuto (int A[], int l, int r, int smallerAtLeft) { if (smallerAtLeft == 1) //move elements smaller than pivot to the left and the greater ones t