用隨機函式生成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 ...