排序演算法(內部排序)總結

2021-09-01 04:38:32 字數 2011 閱讀 2845

排序是計算機應用中的乙個非常重要的操作。平常我們總會聽到一些演算法,但是我們總是似懂非懂的寫著**,今天我將一般常見的排序演算法進行乙個總結。

本次總結只涉及內部排序(所謂內部排序是指在記憶體中進行的排序)

首先說乙個概念:穩定排序與非穩定排序

如果乙個序列中原來相同的元素,排序完成後,仍然保持著原來的順序,那麼就成為穩定排序,反之就是非穩定排序。

插入排序

(1).直接插入排序(straiht insertion sort)

演算法描述:如果有乙個已經排好序的序列 ,當要插入乙個r(66)時,需要與各個元素進行比較,r(35)演算法開始時,取乙個元素為原序列,然後重複執行上面的方法,將每個元素插入到序列中。

void insertsort(sllist &l)

l[j+1] = l[0];

}}

複製**

此演算法的時間複雜度為o(n2)

快速排序

快速排序是一種基於交換的排序方法,最常見的有氣泡排序(bubblesort),快速排序(改進的氣泡排序)(quicksort)

下面先說氣泡排序:

氣泡排序的基本思想是在一次排序中,將最大的元素沉入底部,然後縮小範圍,繼續進行。

具體的說:取第乙個元素,然後與第二個元素進行比較,如果比第二個大,那麼交換,否則,不交換,然後取第二個元素與第三個元素比較,同樣用前面的方法,大則交換,直到將最大的元素交換到最底部,這是第一遍排序結束,然後,縮小範圍,從第二個元素開始,在此運用上面的一遍排序方法。直到範圍縮小為乙個元素的時候,排序結束。

下面是用c++語言描述的乙個氣泡排序的演算法:

int a[5] = ;

for(int i=4;i>=0;i--)

for(int j = 0;j<=i;j++)

}for(int s = 0;s<5;s++)

cout《複製**

由於最近在學習彙編,所以在emu8086上寫了乙個**段,實現氣泡排序:

;彙編氣泡排序演算法

n equ 5

mov cx,n-1

j03:push cx

lea bx,a

j02:mov al,[bx]

cmp al,[bx+1]

jnb j01

xchg al,[bx+1]

mov [bx],al

j01:inc bx

loop j02

pop cx

loop j03

a db 1,2,3,4,

複製**

選擇排序

選擇排序(selection sort)的基本思想是,每一趟排序在n-i+1(i=1,2,3....,n-1)中選取關鍵字最小的記錄作為有序序列的第i個記錄。

(1)最為簡單的是簡單選擇排序(sample selection sort)

void selectsort(sqllist &l)

}

複製**

(2)樹形選擇排序(tree selection sort),又稱錦標賽排序(tournament sort),是一種按照錦標賽的思想,兩兩比較,然後在剩餘的【n/2】個較小的元素中在進行兩兩比較,如此重複,最後選出最小的記錄為止。

(3)堆排序(heap sort)

先介紹一下大頂堆與小頂堆:

在一棵二叉樹中,如果所有父節點比兒子節點都大,稱這顆樹為大頂堆,反之,為小頂堆。

那麼堆排序的思想便是將乙個無序序列構建成大頂堆(或小頂堆)然後取出堆頂元素,再次調整這個堆,使之在此變成大頂推(或小頂堆),如此將所有元素取出,便排好了序。

歸併排序

歸併排序(merging sort)

所謂歸併,簡單的講,就是將兩個有序的序列,合成乙個新的有序表。我們用這個思想,可以把乙個n個元素的序列,看成n個長度為1的子串行,然後利用歸併排序,兩兩合併,然後的到了n/2個長度為2的子串行,再次進行合併,重複上面的步驟,直到合併為乙個序列,則歸併完成。

預覽文章 排序演算法(內部排序)總結

排序是計算機應用中的乙個非常重要的操作。平常我們總會聽到一些演算法,但是我們總是似懂非懂的寫著 今天我將一般常見的排序演算法進行乙個總結。本次總結只涉及內部排序 所謂內部排序是指在記憶體中進行的排序 首先說乙個概念 穩定排序與非穩定排序 如果乙個序列中原來相同的元素,排序完成後,仍然保持著原來的順序...

內部排序總結

排序方式 時間複雜度 空間複雜度 穩定性複雜性 平均情況 最壞情況 最好情況 直接插入排序 o n 2 o n 2 o n o 1 穩定簡單 希爾排序 o n 1.3 n 2 o 1 不穩定較複雜 氣泡排序 o n 2 o n 2 o n o 1 穩定簡單 快速排序 o nlog2 n o n 2 ...

內部排序演算法

內部排序是指待排序列完全存放在記憶體中所進行的排序過程,適合不太大的元素序列。1.快速排序int partition int a,int low,int high a low a high while low2.並歸排序 void merging int list1,int list1 size,i...