演算法和資料結構 各位排序演算法的介紹與實現 C

2021-09-07 11:12:38 字數 2311 閱讀 9129

排序是指將元素集合按照規定的順序排列。通常有兩種排序方法,公升序排列和降序排列。例如,對整數集進行公升序排列,結果為,對其進行降序排列結果為。總的來說,排序的目的是使資料能夠以更有意義的形式表現出來。雖然排序最顯著的應用是排列資料以顯示它,但它往往可以用來解決其他的問題,特別是作為某些已成型演算法的一部分。

總的來說,排序演算法分為兩大類:比較排序和線性時間排序。比較排序依賴於比較和交換來將元素移動到正確的位置上。令人驚訝的是,並不是所有的排序演算法都依賴於比較。對於那些確實依賴於比較來進行排序的演算法來說,它們的執行時間往往不可能小於o(nlg n)。對於線性時間排序,從它的名字就可以看出,它的執行時間往往與它處理的資料元素個數成正比,即為o(n)。遺憾的是,線性時間排序依賴於資料集合中的某些特徵,所以我們並不是在所有的場合都能夠使用它。某些排序演算法只使用資料本身的儲存空間來處理和輸出資料(這些稱為就地排序),而有一些則需要額外的空間來處理和輸出資料(雖然可能最終結果還是會拷貝到原始的記憶體空間中)。

///

///排序演算法

///

///

/// public

class

sorthelper

list[i + 1] =currnet;}}

//////

快速排序

/// ///

目標陣列

///子表的起始位置

///子表的終止位置

public

static

void quicksort(list list, int left, int

right)

}//////

歸併排序

/// ///

目標陣列

///子表的起始位置

///子表的終止位置

public

static

void mergesortfunction(list array, int first, int

last)

}//////

計數排序

///

///要排序的陣列

///陣列的最大值加一

///計數排序後的結果

public

static list countingsort(list arraya, int

arrange)

for (int j = 0; j < arraya.count; j++)

for (int k = 1; k <= arrange; k++)

for (int m = arraya.count - 1; m >= 0; m--)

return

arrayresult.tolist();

}//////

氣泡排序

/// ///

public

void ebullitionsort(listarr)

}j++;}}

#endregion

#region private methods

//////歸併排序的核心部分:將兩個有序的左右子表(以mid區分),合併成乙個有序的表

/// ///

//////

///private

static

void mergesortcore(list array, int first, int mid, int

last)

else

//此時左子表的數 > 右子表的數

}//有一側子表遍歷完後,跳出迴圈,將另外一側子表剩下的數一次放入暫存陣列中(有序)

while (indexa <=mid)

while (indexb <=last)

//將暫存陣列中有序的數列寫入目標陣列的制定位置,使進行歸併的陣列段有序

tempindex = 0

;

for (int i = first; i <= last; i++)

}//////

獲取按樞軸值左右分流後樞軸的位置

/// ///

//////

///private

static

int division(list list, int left, int

right)

else

}return left; //

指向的此時樞軸的位置

}

#endregion

}

對於演算法與資料結構,我們還會繼續,有理論,有實現,希望它可以不那麼枯燥!

感謝咱們的閱讀!

演算法和資料結構 排序 快速排序

交換位置 交換順序表l中子表的記錄,使樞軸記錄到位,並返回其所在位置 此時在它之前 後 的記錄均不大 小 於它。int partition sqlist l,int low,int high return low 返回樞軸所在位置 對順序表l中的子串行l r low.high 作快速排序 void ...

c 演算法和資料結構 快速排序演算法

問題描述 快速排序演算法 描述 快速排序演算法 類名 quicksort public class quicksort while a i pivot i right 從左向右尋找大於支點元素 do while a j pivot j 0 從右向左尋找小於支點元素 if i j break else...

資料結構與演算法 演算法 演算法和資料結構

資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...