直接插入法是最簡單的排序法,其排序思想如下:
打牌時,每抓一張牌就將其放到對應的順序位置。
下面是待排記錄的型別定義:
#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部分,左邊為排序好的部分,右邊為未排序的部分,迴圈整個列表,每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。插入排序非常類似於整撲克牌。在開始摸牌時,左手是空的,牌面朝下放在桌...