1.氣泡排序:n*n。倆個for迴圈決定其時間複雜度為n^2
template <
class
t>
void
swap(t a,
inti,
intj)
//冒泡法bubble sort
template
<
class
t>
void
bubsort(t a,
intn)}}
2.選擇排序:n*n。同樣,倆個for迴圈決定其時間複雜度為n^2。
template <
class
t>
void
swap(t a,
int i, int j)
template
<
class
t>
void
selsort(t a,
intn)
swap
<
t>
(a, i, largindex);
//只進行最後一次交換}}
3.直接插入排序:n*n。倆個for迴圈。
// 1->插入排序
void insertsort(int array, int length)
// 在合適位置安放當前元素
array[j + 1] = key;}}
// 2-->
插入法insert sort
template <
class
t>
void
swap(t a,
int i, int j)
//插入法insert sort
template
<
class
t>
void
inssort(t a,
intn)}}
4.快速排序:
歸併排序演算法思想的 c實現:
//july/設計/整理/測試/06.06/。
//1.分而治之排序演算法的偽**
//演算法中子集合的數目為2,a中含有n/k個元素。
template void sort( t e, int n)
else
使用插入排序演算法對e 進行排序
}//2.根據網路上的演算法提示,寫出以下**:
#include
void mergepass(int x,int y,int s,int n);
void merge(int c, int d, int l, int m, int r);
//首先將每兩個相鄰的大小為1的子串行歸併,
//然後對上一次歸併所得到的大小為2的子串行進行相鄰歸併,
//如此反覆,直至最後歸 並到乙個序列,歸併過程完成。
//通過輪流地將元素從a 歸併到b 並從b 歸併到a,可以虛擬地消除複製過程。
//...二路歸併排序演算法見程式14-3。
//14-3.二路歸併排序
void mergesort(int a,int n)
// 剩下不足2個元素
if(i+s//...函式mergepass(見程式14-4)僅用來確定欲歸併子串行的左端和右端,
//...實際的歸併工作由函式merge(見程式14-5 )來完成。
//...函式merge要求針對型別t定義乙個操作符<=。
//14-5。merge函式
void merge(int c, int d, int l, int m, int r)
// 考慮餘下的部分
if(i>m)
else
}int main()
;mergesort(str,7);
for(int i=0;i<7;i++)
printf("%d\n",str[i]);
return 0;
}//3...森林大哥的寫法,測試下,無誤。:
#include
#define n 100
void sort(int str,int n)
if(2==n)
return;
}for(int i=0;i
int main()
;sort(str,7);
for(int i=0;i<7;i++)
printf("%d\n",str[i]);
return 0;
}
各種排序演算法比較 時間複雜度,空間複雜度
n 2表示n的平方,選擇排序有時叫做直接選擇排序或簡單選擇排序 排序方法平均時間最好時間最壞時間 桶排序 不穩定 o n o n o n 基數排序 穩定 o n o n o n 歸併排序 穩定 o nlogn o nlogn o nlogn 快速排序 不穩定 o nlogn o nlogn o n ...
各種排序演算法 c 及時間複雜度分析
編譯平台 vs2010 include stdafx.h int tmain int argc,tchar argv int j,tmp for int i 1 i 8 i a j 1 tmp for int i 0 i 8 i printf n system pause return 0 incl...
各種排序演算法複雜度比較
寫在前面 筆試題目當中會出現各種排序演算法的比較,分為最好,最壞,平均情況的複雜度比較,在這裡總結一下。主要內容 最好情況 一般會這麼問 在各自最優條件下以下演算法複雜度最低的是 看清題目的要求是問在最優的條件下,所以插入排序和氣泡排序是最優的為o n 的複雜度。氣泡排序這裡為啥最好情況時o n 氣...