基本的排序演算法

2021-07-11 12:43:23 字數 3249 閱讀 1429

演算法思路:假設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 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置。再從剩餘未排序元素中繼續尋找最小 大...