型別
一、選擇排序
(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...