八大記憶體排序演算法

2021-10-06 18:24:54 字數 2845 閱讀 1926

型別

一、選擇排序

(1)氣泡排序:

a.每趟排序,最大沉底;

b.排列元素個數逐漸(從尾)減一,因為每趟排序,最後一位已確定;

c.每次冒泡序列:0 ~ i-1

timecost:o(n^2)

spacecost:o(n)

**:

void

bubblesort

(int

nums)

}}

(2)快速排序(劃分排序、基準位排序)

a. 思想:基準位排序,每趟劃分找出基準位,基準位左邊小於它,基準位右邊大於它;

b. 遞迴操作

遞迴原子操作:分別劃分基準位左邊序列(left,k-1) 和基準位右邊序列(k+1,right);

遞迴判定條件:最小劃分為單個元素,基準位為單個元素,此時left == right,所以判定條件為left < right;

c. 複雜度分析

time complexity:共(logn)趟劃分,每趟劃分耗時(o(n)),共耗時o(nlogn),所以o(nlogn);

space complexity:遞迴棧深度為n, 所以o(n);

**:

/*啟動函式*/

void

startquicksort

(int

nums)

/*快排函式*/

void

quicksort

(int

nums,

int left,

int right)

}/*劃分函式, 返回基準元素*/

intpartition

(int

nums,

int left,

int right)

swap

(nums[pivot]

, nums[right]);

return right;

}

型別

二、選擇排序

(3) 簡單選擇排序:

a.每趟從已知序列中找出最小值,與首元素交換;

b.排列元素個數逐漸(從頭)減一,因為每趟排序,首位已確定;

c.每次選擇序列:i ~ len;

timecost:o(n^2)

spacecost:o(n)

**:

void

selectsort

(int

nums)

swap

(num[i]

, min);}

}

(4)堆排序:

利用小頂堆,每次輸出堆頂值(最小值);

timecost:o(nlogn)

spacecost:o(n)

型別

三、插入排序

(5)直接插入排序:

a. 以首元素為有序序列,後面元素依次插入有序序列;

b. 每次插入序列:0 ~ i;

timecost:o(n^2)

spacecost:o(n)

**:

void

insertsort

(int

nums)

}}

(6)希爾排序

型別

四、合併排序

(7)合併排序

a. 思想:

先**,再合併;

合併兩個有序序列,最小的有序序列為單個;

b. 遞迴操作

遞迴原子操作:合併(left, mid)和(mid+1, right)兩個有序序列

遞迴判定條件:取決於原子操作,單個有序序列只有乙個元素,left和right相等,即可返回,所以判定條件為 left < right;

c. 複雜度分析

time complexity:o(nlogn)

space complexity:o(n)

**:

int

sort

(int

nums,

int low,

int high)

return nums;

}void

merge

(int

nums,

int low,

int mid,

int high)

else

}// 把左邊剩餘的數移入陣列

while

(i <= mid)

// 把右邊邊剩餘的數移入陣列

while

(j <= high)

// 把新陣列中的數,覆蓋部分nums陣列

for(

int k2 =

0; k2 < temp.length; k2++

)}

型別

五、基數排序(桶排序)

(8)基數排序

八大內部排序演算法

八大內部排序包括 l插入排序 直接插入排序 希爾排序 又稱增量排序 l選擇排序 簡單選擇排序 堆排序l交換排序 氣泡排序 快速排序 l歸併排序 l基數排序 又稱桶排序 排序演算法解析 1 直接插入排序與希爾排序 直接排序與希爾排序同屬於插入排序,不一樣的是,直接排序每次將tmp元素與前面所有的元素進...

八大內部排序

排序,就是重新排列表中的元素,使得表中元素滿足按關鍵字有序的過程。排序有許多種,常用的八大內部排序為氣泡排序 插入排序 選擇排序 希爾排序 快速排序 歸併排序 基數排序 堆排序 這幾種排序沒有絕對的優劣,每種排序都有他們適用範圍 氣泡排序每一趟排序可以確定乙個元素的最終位置,若一次掃瞄並沒有元素進行...

八大內部排序

先來看看8種排序之間的關係 一 直接插入排序 如下 1 public void inerrtsort int a 10 a j 1 tem 11 12 看起來簡單 實則有太多細節 二 希爾排序 public void shellsort int list list j gap temp 縮小增量 g...