演算法思路:假設a[1…n]是乙個有n個元素的陣列。
首先從a[1…n]找到最小元素,將其放在a[1]中
從a[2…n]中找到最小元素,將其放在a[2]中
重複a[i…n]中找到最小元素,將其放在a[i]中
直至i=n-1
元素比較次數: ∑n
i=1(
n−i)
=∑ni
=1i=
n(n−
1)/2
時間複雜度為o(
n2)
不穩定排序
**實現:
void selectionsort(int arr, int
len)
if (k != i)
}}
演算法思路:假設a[1…n]是乙個有n個元素的陣列。
從a[n]向前遍歷直至a[ 1 ],如果a[j]小於a[j-1],a[j]與a[j-1]交換,依次遍歷,a[1]為最小元素
從a[n]向前遍歷直至a[ 2 ],類似1
直到所有元素都以非降序排列,或前n-1個元素都已排序
元素比較次數: ∑n
i=1(
n−i)
=∑ni
=1i=
n(n−
1)/2
時間複雜度為o(
n2)
穩定排序
**實現:
void bubblesort(int arr, int
len)
}if (flag) //如果所有元素均已有序,直接跳出迴圈
break;
}}
演算法思路:假設a[1…n]是乙個有n個元素的陣列
從大小為1的子陣列a[ 1 ]開始,將a[ 2 ]插入到a[ 1 ]的前面或後面,完成一次排序。
重複以下過程:將a[i]插入到已排序的子陣列a[1…i-1]中合適位置。
直至i=n
元素比較次數: ∑n
i=2(
i−1)
=∑n−
1i=1
i=n(
n−1)
/2
時間複雜度為o(
n2)
穩定排序
**實現:
void insertsort(int arr, int len)
arr[j + 1] = temp;
}}
演算法思路:
先從數列中取出乙個數作為基準數。
分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
再對左右區間重複第二步,直到各區間只有乙個數。
平均時間複雜度為o(
nlog2n
) ,最壞時間複雜度為o(
n2)
不穩定排序
**實現:
void quicksort(int arr, int low, int high)
arr[l] = temp;
mid = l;
quicksort(arr, low, mid - 1);
quicksort(arr, mid + 1, high);
}}
演算法思路:自頂向下,不斷將陣列分成兩半,直至每部分只有乙個元素。再合併兩部分已排好序的的陣列成為乙個陣列。
平均時間複雜度為o(
nlog2n
) 穩定排序
**實現:
void merge(int arr, int low, int
mid, int high)
if (i == mid + 1)
}else
}for (i = low; i <= high; i++)
}void mergesort(int arr, int low, int high)
}
建立堆:時間複雜度為o(
n)堆排序:平均時間複雜度為o(
nlog2n
)【建堆
o(n),s
iftd
own運
算 o(
log2
n)時間,重複n-1次】
不穩定排序
**實現:
void siftdown(int arr, int
len, int idx)
else
done = true;
}}void makeheap(int arr, int
len)
}void heapsort(int arr, int
len)
}
演算法思路:假設l=是乙個有n個元素的表,其中每個元素恰好有k位數字,即dk
dk−1
...d
1, d
i 是0-9的數字。
首先根據d1
位,把表中所有元素分到l0
,l1,
...l
9 中,即d1
=0的數分到l0
中,d1
=1的數分到l1
中,等等。按照d
2 分到10張表中,按順序連線起來。
依次進行到dk
,即可完成排序。
時間複雜度為o(
kn)
穩定排序
舉例:下面為8個四位數
初始第 一次
第二次第三次
第四次7467
679 2
93 1 4
9 1 34
1 239
1247
913 4
12 3 9
9 1 87
1 247
3275
327 5
12 4 7
1 2 39
3 275
6792
467 5
74 6 7
1 2 47
4 675
9187
746 7
32 7 5
3 2 75
6 792
9134
124 7
46 7 5
7 4 67
7 467
4675
918 7
91 8 7
4 6 75
9 134
1239
123 9
67 9 2
6 7 92
9 187
基本的排序演算法
時間複雜度o n2 空間複雜度o 1 穩定 public void bubblesort int a 時間複雜度 o n2 空間複雜度o 1 不穩定 public void selectsort int a int temp a i a i a min a min temp 時間複雜度 o n2 空...
基本的排序演算法
容易的演算法效率比較低,但是容易理解。每乙個python的排序函式都會使用乙個swap的函式來交換列表中的兩項的位置,函式的 如下 def swap lyst,i,j 交換lyst中的i和j位置的item temp lyst i lyst i lyst j lyst j temp pass或者pyt...
基本的排序演算法
原理 比較兩個相鄰的元素,將值大的元素交換到右邊 思路 依次比較相鄰的兩個數,將比較小的數放在前面,比較大的數放在後面。function bubblesort arr bubblesort arr1 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置。再從剩餘未排序元素中繼續尋找最小 大...