C++ 八种排序算法总结及实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
八种排序算法总结之C++版本
五种简单排序算法
一、冒泡排序【稳定的】
void BubbleSort( int* a,int Count ) //实现从小到大的最终结果
{
int temp;
for(int i=1; i
if( a[j] < a[j-1] )
{
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
现在注意,我们给出O方法的定义:
若存在一常量K和起点n0,使当n>=n0时,有f(n)<=K*g(n),则f(n) = O(g(n))。(呵呵,不要说没学好数学呀,对于编程数学是非常重要的!!!)
现在我们来看1/2*(n-1)*n,当K=1/2,n0=1,g(n)=n*n时,1/2*(n-1)*n<=1/2*n*n=K*g(n)。所以f(n) =O(g(n))=O(n*n)。所以我们程序循环的复杂度为O(n*n)。
二、交换排序【稳定的】
void ExchangeSort( int *a,int Count)
{
int temp;
for(int i=0; i for(int j=i+1; j if( a[j] < a[i] ) { temp = a[j]; a[j] = a[i]; a[i] = temp; } } 时间复杂度为O(n*n)。 三、选择法【不稳定的】 void SelectSort( int *a,int Count) { int temp; //一个存储值 int pos; //一个存储下标 for(int i=0; i { temp = a[i]; pos = i; for(int j=i+1; j if( a[j] < temp ) //选择排序法就是用第一个元素与最小的元素交换 { temp = a[j]; pos = j; //下标的交换赋值,记录当前最小元素的下标位置} a[pos] = a[i]; a[i] = temp; } } 遗憾的是算法需要的循环次数依然是1/2*(n-1)*n。所以算法复杂度为O(n*n)。 我们来看他的交换。由于每次外层循环只产生一次交换(只有一个最小值)。所以f(n)<=n 所以我们有f(n)=O(n)。所以,在数据较乱的时候,可以减少一定的交换次数。 四、插入法【稳定的】 void InsertSort( int *a,int Count) { int temp; //一个存储值 int pos; //一个存储下标