#include "main.h"
#include
#include
using namespace std;
void merge(int a, int l, int m, int r);
void printnum(int arr, int len, string flag)
void swap(int &a, int &b)
/****氣泡排序實現*************
1.外層i迴圈n-1次,這是控制迴圈次數的。
2.內層j,j對應的實際下標,迴圈n-i-1次,
-i是因為每次迴圈完後最後一位就排好序了,對應為n-i次。
-1是因為要取到j+1的值。
******************************/
void bubblesort(int a, int len)
}if (flag == 0)
break;}}
/*選擇排序實現
1.外層i迴圈n-1次,這是控制迴圈次數的。
2.內層j,j對應的實際下標,迴圈n-i次,
-i是因為每次迴圈完後最後一位就排好序了,對應為n-i次。
******************************/
void selectsort(int a, int len)
}swap(a[maxtmp],a[len-i-1]);}}
/*插入排序*
1.外層i迴圈n-1次,這是由於每次排序相當於把乙個數插入乙個已排好序的陣列,所以下標從1到結束。
2.將已排好序的陣列從後往前依次與要插入的數比較,當比要插入的數大時就往後移位。
********************************/
void insertsort(int a, int len)
a[k] = tmp;}}
/**快排的思想是找到中間值,
然後左邊從左往右找到比中間值大的值
然後右邊從右往左找比中間值小的值
交換左右兩邊的值
取左邊界到右邊找到值的區間再次遞迴呼叫
取左邊找到值到右邊界的區間再次遞迴呼叫*/
void quicksort(int a, int l, int r)
while (mout < a[j])
if (i <= j)
}if (l < j)
if (i < r)
}/**
歸併排序:開始於將兩個有序陣列合併成乙個
當然資料不可能是有序的,所以在歸併時使用遞迴將陣列劃分,然後每輪遞迴
**/void mergsort(int a,int l,int r)
else
}void merge(int a, int l, int m, int r)
for (int i = m; i <= r; i++)
int i = 0;
int j = 0;
int k = l;
while (i < (m - l) && j < (r - m + 1))
else
}while (i < (m - l))
while (j < (r - m + 1))
delete lifta, righta;
}/**希爾排序
插入排序的一種形式採用的是元素間下標隔斷遞增的形式進行插入操作
**/void shellsort(int a, int len)
a[j] = tmp;}}
}/****堆排序 先說清楚,完全沒看明白 一度對自己的智商產生了懷疑 於是決定先把**敲了****/
void adjust(int a, int idx1, int idx2)
else
}a[idx1] = tmp;
}void headsort(int a, int len)
//排序,根節點和最後乙個節點交換,調整
for (int i = len - 1; i > 0; --i)
return ;
}//測試
int main(void) ;
int len = sizeof(girl) / sizeof(girl[0]);
printnum(girl, len, "排序前");
headsort(girl, len);
printnum(girl, len, "排序後");
system("pause");
return 0;
}
常用排序演算法實現
按平均時間將排序分為四類 1 平方階 o n2 排序 一般稱為簡單排序,例如直接插入 直接選擇和氣泡排序 2 線性對數階 o nlgn 排序 如快速 堆和歸併排序 3 o n1 階排序 是介於0和1之間的常數,即0 1,如希爾排序 4 線性階 o n 排序 如桶 箱和基數排序。各種排序方法比較 簡單...
常用排序演算法實現
常用排序演算法 目錄 常用排序演算法 1 1.插入排序 1 2.希爾排序 2 3.氣泡排序 3 4.快速排序 4 5.選擇排序 5 6.歸併排序 6 1.插入排序 public class insertsort a j 1 temp 插入 public static void main string...
常用排序演算法 C實現
1.1 氣泡排序 演算法描述 所給的n個數中,先拿第乙個數來和第二個比較,然後讓較大的乙個排在後面 即如果n1 n2,則讓n1與n2交換位置 然後又拿第二個數來和第三個數比較,又把較大的乙個排在後面,如此往下做下去,直到第n 1個數和第n個數比較完後,最大的那個數就會被公升到了最後面來.接下來又照同...