小白打基礎系列 排序演算法之插入 冒泡與快速排序

2021-10-07 08:16:59 字數 2911 閱讀 7737

直接插入法是最簡單的排序法,其排序思想如下:

打牌時,每抓一張牌就將其放到對應的順序位置。

下面是待排記錄的型別定義:

#define maxsize 200

typedef

int keytype//關鍵字型別

typedef

struct

redtype;

//記錄型別

typededf struct

sqlist;

上述的redtype結構體型別實際上是沒必要定義的,實際做題時可以寫成如下**,更方便一點:

#define maxsize 200

typedef

int keytype//關鍵字型別

typededf struct

sqlist;

直接插入排序演算法的描述:

void

insertsort

(sqlist &l)

}}

常見錯誤by小胡:

1)低位輸出隨機數。(記錄逐個後移,找到插入位置)三行**的位置放在了if語句外,導致即便低位符合降序,但仍執行**,致溢位。

直接插入排序演算法分析:

希爾排序法是直接插入法的優化,它的思想是先將整個排序序列分成若干子串行,並分別進行直接插入排序,當整個記錄中的序列基本有序時,再對全體記錄進行一次直接插入排序。

希爾排序法的描述:

void

shellinsert

(sqlist& l,

int dk)

//if

}//for

}//shellinsert

void

shellsort

(sqlist& l,

int dt,

int t)

希爾排序法演算法分析:

利用希爾排序解決如下問題:

輸入輸入的第一行包含1個正整數n,表示共有n個整數需要參與排序。其中n不超過1000。

第二行包含n個用空格隔開的正整數,表示n個需要排序的整數.

輸出只有1行,包含n個整數,表示從小到大排序完畢的所有整數。

請在每個整數後輸出乙個空格,並請注意行尾輸出換行。

樣例輸入

102 8 4 6 1 10 7 3 5 9

樣例輸出

1 2 3 4 5 6 7 8 9 10

下面是原始碼:

#include

using

namespace std;

#define keytype int

#define maxsize 1000

typedef

struct

sqlist;

void

shellinsert

(sqlist& l,

int dk)

//if

}//for

}//shellinsert

void

shellsort

(sqlist& l,

int dt,

int t)

intmain()

shellsort

(l,dlta,n)

;for

(int i =

1; i <= n; i++

) cout << l.r[i]

<<

" ";

cout << endl;

return0;

}

氣泡排序排序法,相鄰元素之間進行比較,如果逆序則交換位置。

氣泡排序法的描述:

void

bubblesort

(sqlist &l)

//if

−−m;

}//while

}//bubblesort

實際上此氣泡排序是對原氣泡排序的一種優化,flag識別符號實現了優化。

例如:1 2 5 3 7 8 9 10

原氣泡排序要比較7趟,而此氣泡排序只需比較3趟。

下面貼上原氣泡排序演算法描述:

void

bubblesort

(sqlist &l)

--m;

}

氣泡排序演算法分析:

快速排序法是最常用的一種排序方法,同時也是很典型的分治思想,分而治之。它的排序思路如下:

1.任取乙個記錄作為樞軸

2.劃分:所有比樞軸小的記錄一律前放,比樞軸大的記錄一律後放,形成左右兩個子表

3.對子表重新進行前兩步操作,直到每個子表元素只剩乙個

快速排序法演算法描述:

int

partition

(sqlist &l,

int low,

int high)

//while

l.r[low]

=l.r[0]

;//樞軸記錄到位

return low;

//返回樞軸位置

}//partition

void

qsort

(sqlist &l,

int low,

int high)

//if

}//qsort

void

quicksort

(sqlist &l)

//quicksort

快速排序演算法分析:

小白打基礎系列 線性表的應用之大愛線性表

2020資料結構課程設計之大愛線性表 大愛線性表 不少參賽同學剛學資料結構,對線性表最是熟悉不過。這裡我們給線性表增加兩個特殊的操作,第乙個是 r 操作,表示逆轉整個表,如果表長為l,原來的第i個元素變成第l i 1個元素。第二個操作是 d 表示刪除表的第乙個元素,如果表為空,則返回乙個 error...

演算法基礎之排序 插入排序

排序演算法是演算法基礎中最常見也是最應該掌握的演算法。插入排序的想法,和我們玩撲克牌起牌相似。從左手為空開始,撲克牌背面朝上至於桌上,每次從桌面上摸一張牌,並將其插入到左手正確的位置,使得左手中的牌是有序的。為了找到這張牌的正確插入位置,從右到左逐一比較左手中的牌。當摸完桌上的牌時,左手中的牌就是排...

基礎演算法之插入排序演算法

插入排序 insertion sort 的基本思想是 將列表分為2部分,左邊為排序好的部分,右邊為未排序的部分,迴圈整個列表,每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。插入排序非常類似於整撲克牌。在開始摸牌時,左手是空的,牌面朝下放在桌...