整數排序演算法有問題? 排序演算法 計數排序

發布 科技 2024-02-09
10個回答
  1. 匿名使用者2024-02-05

    快速行(最常見和最簡單的)。

    演算法的想法是分而治之。

    實施過程如上GIS19831203所述。

    查詢樞軸(樞軸左側的樞軸小於樞軸,樞軸右側的樞軸大於樞軸),並且通過遞迴重複執行此操作。 ”

    堆疊(不穩定,但解決某種型別問題的有效演算法思想)是一種時間複雜度為 n*(log2 n) 的演算法。

    我不知道更快的演算法!!

    資料的最大計算量為:

    估計。。。。。。即使是這樣的演算法也需要幾十分鐘才能計算出來!!

    除非你使用超級計算機......

    起泡,插入......等於 n 2 個演算法。

    別想了。

    快速行要求提前讀取所有資料。

    似乎沒有必要能夠乙個接乙個地讀取來建立乙個堆。

    然後繼續操作,但堆也需要完整記錄。

    鑑於您的最大資料量為 2 32!!

    僅從空間角度來看,這並不令人滿意

    儘管該演算法非常高效、快速且令人敬畏。

    普通裝置也很難滿足您的最大資料要求。

    對作業系統的要求也非常苛刻(推薦使用linix),c似乎自帶排序功能。

    明白了。

    默然。。。。。。在這種情況下,請使用快速排序演算法。

    500,000 是一秒鐘(應該是瞬間的事情)。

    您使用的演算法是 n 2 的演算法,這太慢了。

    一般來說,這類問題所需的時間應該在兩者之間。

    研究的知識點是時間複雜度為 n*(log2 n) 的排序演算法。

    程式無法以有時限的方式測試所有資料。

    建議使用快速測序演算法。

    上網搜尋此類演算法的解釋。

    找到你自己的解釋,然後學習......

  2. 匿名使用者2024-02-04

    你可以用冒泡法來嘗試,即連續放電兩個相鄰數字的大小。

  3. 匿名使用者2024-02-03

    上面提到的排序演算法都是通過比較實現的。 可以在沒有比較的情況下實現排序嗎? 是的,這就是計算和分類握把的神奇之處。

    建立乙個計數陣列,使用陣列下標表示元素,並使用陣列下標對應的值來表示元素出現的次數。 然後遍歷 count 陣列。 例如,如果下標是 5,元素值是 2,則表示 5 出現兩次,5 可以連續寫兩次。

    1.箱:

    假設要排序的訂單的 arr 如下:

    最大元素為 8,因此建立乙個最大下標為 8 的陣列:

    遍歷要排序的序列,第乙個是 5,所以 count[5]++,第二個是 7,所以 count[7]++

    最終的計數陣列為:

    最後,根據計數陣列,我們可以知道 3 出現一次,4 出現一次,5 出現兩次,......出現您可以知道排序應如下所示:

    這看起來很完美,但有兩個問題。

    2.問題 1:

    上面的 5 出現了兩次,最後乙個排序陣列中下標為 2 的 5 仍然是原始序列中下標為 0 的 5? 也就是說,當數值相同時,就沒有辦法保證排序後相同元素出現的順序與排序前相同,這就是我們所說的不穩定排序。 如何優化?

    讓我們標記上乙個陣列中的兩個 5,以便更容易區分它們:

    這樣,count 陣列就變成了:

    3.問題 2:

    假設現有的 to-be arr 如下所示:

    如前所述,count 陣列的最大下標是 arr 陣列的最大值,即如果要對這四個數字進行排序,則需要建立乙個長度為 1001 的陣列。 而且,這些從0到994的空間沒有被使用,它們被浪費了。 因此,計數陣列的長度應為 max(arr) -min(arr) +1,即從最小值中減去最大值,然後加以 1。

    在這種情況下,計數的長度為 1000 - 995 + 1 = 6,那麼每個元素應該放在哪個下標上呢? 從最小的元素中減去每個元素,結果值對應於 count 的下標。 例如,如果 999 - 995 = 4,則 999 應該對應於 count[4]。

    4.計數排序的缺點:

    從上面的分析中我們可以知道,計數排序是適用於資料分布相對集中的資料,即最大值和最小值相差不大,如果相差很大,會非常耗費空間。

  4. 匿名使用者2024-02-02

    選擇排序是一種簡單易實現的資料排序演算法。 以整數陣列元素為例,有陣列 a[10],即 a[0]、a[1] ,...A[8]、A[9](假設它們的元素彼此不同)。 要求其元素按增量排序。

    以元素為參考從乙個方向開始掃瞄,例如從左到右,以 a[0] 為參考。

    下乙個。。。從 a[0]。a[9] 並將其換成 a[0]。

    然後將基準位置向右移動乙個位置並重複上述操作,例如,以 a[1] 為底,找到 a[1] a[9] 中的最小值並與 a[1] 交換。

    當基準位置移動到陣列的最後乙個元素時,排序結束(此時,基準左側的所有元素都是遞增排序的,基準是最後乙個元素,因此排序完成)。

    main()

    int array[10];

    初始化陣列!

    int i,j,k,temp;

    for(i=0;i<10-1;i++)="" }

  5. 匿名使用者2024-02-01

    我覺得太難了,就像我讀書的時候的排列組合問題,但仔細看,不是,對於數學成績不是很好的人來說,真的有點難,所以我先看書。

  6. 匿名使用者2024-01-31

    讓我們從快速排序中的最佳排序情況開始,在最好的情況下,每次我們分割槽時,我們會將乙個序列分成兩個幾乎相等的子序列,在這種情況下,每次遞迴呼叫它時,我們也會處理子序列大小的一半。 這看起來像乙個深度為 o(logn) 的完整二叉樹,因此您需要進行 o(logn) 巢狀呼叫。 但是,在同一層次結構中的兩個程式呼叫中,不會處理原始序列的同一部分。

    因此,程式呼叫的每個層次結構總共需要 o(n) 時間。 因此,在最好的情況下,該演算法的時間複雜度為 o(nlogn)。

    但是呼叫遞減資料進行遞增排序是快速排序中最糟糕的情況,您可以想象在每個分割槽之後都有乙個長度為 1 且 n-1 的子序列,這將導致我們的表示式變為:

    t(n) =o(n) +t(1) +t(n-1) =o(n) +t(n-1)

    這是時間複雜度,即 o(n)。

  7. 匿名使用者2024-01-30

    面試最基本的排序演算法。

  8. 匿名使用者2024-01-29

    1.背景。

    在電腦科學和數學中,排序演算法是一種以特定排序方式排列資料串的演算法。

    最常用的排序方法是數字順序和字典順序。

    有效的排序演算法在某些演算法(例如,搜尋演算法和合併演算法)中很重要,因此可以正確回答這些演算法。

    排序演算法還用於處理文字資料並生成人類可讀的輸出。

    基本上,排序演算法的輸出必須遵循以下兩個原則:

    1.輸出結果為遞增序列(遞增為所需排序順序);

    2、輸出結果是對原輸入的排列或重組;

    2.知識分析。

    搜尋和排序演算法是對演算法的介紹,其經典思想可以應用於許多演算法。 由於其實現時間較短,因此應用程式更常見。 因此,在面試中,通常會詢問有關排序演算法及其相關問題的問題。

    但是,只要您熟悉這些想法,靈活使用它們並不難。

    一般來說,面試中最常見的測試是快速排序和氣泡排序,經常有面試官要求他們當場寫出這兩種排序。 這兩種**必須觸手可及。 除此之外,還有插入排序、氣泡排序、堆排序、基數排序、桶排序等。

    3.常用演算法:

    冒泡演算法,選擇排序,插入排序,山排序,合併排序,快速排序。

    演算法特點:

    1. 有限性:演算法必須確保在執行有限步驟後結束。

    2. 確定性:演算法的每個步驟都必須精確定義。

    3.輸入:乙個演算法有零個或多個輸入來描述操作物件的初始情況,所謂零輸入意味著演算法本身被賦予了初始條件。

    4. 輸出:乙個演算法有乙個或多個輸出。 沒有輸出的演算法是沒有意義的。

    5.可行性:演算法中執行的任何計算步驟都可以分解為基本的可執行操作步驟,即每個計算步驟都可以在有限的時間內完成(也稱為有效性)。

  9. 匿名使用者2024-01-28

    選擇d選擇排序,第一次行程完成後,必須是最小的,最大值在前面,所以第一次行程完成後沒有條件快速排序,左邊比他小,右邊比他大(反之亦然)。

    在堆排序的第一趟之後,需要看看在建立完整的二叉樹後,編號為 1 的節點是如何調整的,可以發現答案不匹配。

    合併順序是從小到大到合併子區間,可以發現子區間[1,2]、[3,4]、[5,6]、[7,8]都是有序的。

  10. 匿名使用者2024-01-27

    這些方法都差不多,新手可以看一看,主要是學習不同方法的思想。

    這不是方法本身,而是你思考問題的方式。

相關回答
5個回答2024-02-09

沒有優點或缺點,這種演算法只是解決收斂問題的一種方法。 優缺點需要比較,沒有比較物件和相同的比較條件,怎麼談優缺點。 每個問題都可以解決許多演算法,迭代不一定是好是壞。 >>>More

3個回答2024-02-09

==均勻三次 b 樣條插值 **********=

定義變數:x:原始資料,d:控制頂點。 >>>More

16個回答2024-02-09

只要 o(n) 掃瞄一次,數百萬個陣列並不大,而 c 可以為全域性變數開啟這麼大。 >>>More

3個回答2024-02-09

隨著網民數量的增加,網友對優質網際網絡生態環境的渴望不斷擴大,憑空誕生的360搜尋,半年時間就搶占了10%以上的搜尋份額,實在是站不住腳。 在過去的一年裡,演算法更新變得越來越頻繁,每次更新前都會有批准,旨在為站長創造更好的使用者體驗,也給一些辛苦了的心頭人乙個後悔的機會。 在演算法更新以向使用者呈現更好的內容後,我將總結更新後SEO將走向何方。 >>>More

5個回答2024-02-09

試試我的方式:

在窗體上建立乙個文字和乙個命令1 >>>More