各種排序演算法的實現

2021-10-01 12:14:24 字數 3448 閱讀 7843

用隨機函式生成16個2位正整數(10~99),實現插入排序、選擇排序、氣泡排序、雙向冒泡、快速排序、二路歸併排序等多種排序演算法,輸出排序中間過程、統計關鍵字的比較次數和記錄的移動次數。

//用隨機函式生成16個2位正整數(10~99),

//實現插入排序、選擇排序、氣泡排序、雙向冒泡、快速排序、二路歸併排序等多種排序演算法,

//輸出排序中間過程、統計關鍵字的比較次數和記錄的移動次數。

#include

#include

using

namespace std;

#define maxsize 20

//順序表的最大長度

int com, mov;

//比較次數and移動次數

typedef

struct

elemtype;

//順序表的儲存結構

typedef

struct

sqlist;

//順序表型別

//隨機生成16個2位正整數

void

create_sq

(sqlist &l)

cout << endl;

}void

show

(sqlist l)

//輸出資料(排序後的資料)

//對順序表l做直接插入排序

void

insertsort

(sqlist &l)

show

(l);

//過程

cout << endl;

} cout <<

"直接插入後的序列:"

<< endl;

show

(l);

cout << endl;

com = l.length -1;

//比較次數的計算

cout <<

"直接插入的比較次數:"

<< com << endl;

cout <<

"直接插入的移動次數:"

<< mov << endl;

cout << endl;

}//對順序表l做選擇排序

void

selectsort

(sqlist &l)

//交換r[i]與r[k]

show

(l);

cout << endl;

} cout <<

"選擇排序後的序列:"

<< endl;

show

(l);

cout << endl;

com =

((l.length -1)

*l.length)/2

;//比較次數的計算

cout <<

"選擇排序的比較次數:"

<< com << endl;

cout <<

"選擇排序的移動次數:"

<< mov << endl;

cout << endl;

}//對順序表l做氣泡排序

void

bubblesort

(sqlist &l)

com++;}

--m;

} cout <<

"氣泡排序後的序列:"

<< endl;

show

(l);

cout << endl;

cout <<

"比較的次數為"

<< com << endl;

cout <<

"移動的次數為"

<< mov << endl;

}//對順序表l做雙向冒泡

void

swap

(int

&x,int

&y)// 雙向氣泡排序

void

twobubblesort

(sqlist &l)

} right = shift;

for(i = right -

1; i >= left; i--)}

cout <<

"雙向氣泡排序的過程:"

<< endl;

show

(l);

left = shift;

} cout <<

"雙向氣泡排序後的數:"

<< endl;

show

(l);

cout << endl;

cout <<

"比較的次數為"

<< com << endl;

cout <<

"移動的次數為"

<< mov << endl;

}//對順序表l做快速排序

intpartition

(sqlist &l,

int low,

int high)

//如果記錄比樞軸記錄大,high--

if(low < high)

while

(low < high&&l.r[low]

.key <= pivotkey)

//如果記錄比樞軸記錄小,low+1,比較次數+1

if(low < high)

} l.r[low]

= l.r[0]

; mov++

;//樞軸記錄到位

return low;

//返回樞軸位置

}void

qsort

(sqlist &l,

int low,

int high)

}void

quicksort

(sqlist &l)

//對順序表l做快速排序

//對順序表l做二路歸併排序

void

merge

(elemtype r[

], elemtype t,

int low,

int mid,

int high, sqlist &l)

while

(i <= mid)

//將剩餘的r[low..mid]複製到t中

t[k++

]= r[i++];

while

(j <= high)

//將剩餘的r[j.high]複製到t中

t[k++

]= r[j++];

show

(l);

}void

msort

(elemtype r[

], elemtype t,

int low,

int high, sqlist &l)

}void

mergesort

(sqlist &l)

intmain()

各種排序演算法的實現

各種排序演算法的實現 1.快速排序 void swap int a,int b int partion int a,int p,int r a p a j a j x return j void quick sort int a,int p,int r a s rc heap adjust void...

各種排序演算法的實現

排序演算法在很多面試中都會涉及到,而且還分為很多種,看得眼花繚亂的,這兒我就先說說幾個較簡單的演算法的實現 本來是想把各種排序方法寫在乙個函式裡可供選擇使用的,但是想著還是把每種演算法直觀的說清楚最好,故分開實現。1 插入排序 插入排序可以聯想到玩撲克牌,當你手上有若干張排好序的牌,又拿起一張新的牌...

各種排序演算法的實現

排序演算法總結 關於演算法的不穩定性不是很理解,需要進一步加強。很形象 int a n int b n int c n 插入排序 void insert sort int arr arr j 1 key 將key移動到前邊沒有比key大的值得位置上 print arr arr 6 9 2 1 69 ...