C++排序算法总结及性能大致分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这里讲的排序默认为内排序。

参考书籍:数据结构(C语言版)

秦玉平马靖善主编

冯佳昕周连秋副主编

清华大学出版社

按照排序过程中依据的原则不同划分为:

(1)插入排序包括直接插入排序,折半插入排序,2_路插入排序,shell排序

(2)交换排序包括简单交换排序,冒泡排序,快速排序

(3)选择排序包括简单选择排序,*树形选择排序,*堆排序

(4)归并排序

(5)计数排序包括*计数排序,基数排序

*上面打星号的代码没有添加*

下面代码修改自

/%D0%E3%B2%C5%CC%AB%CA%D8/blog/item/5ad1f372177b21 158701b093.html

主要修改了快速排序的错误,添加了折半插入排序和2_路插入排序,而且按照以上(1)~(5)重新改写了程序的结构。

代码如下:

排序头文件:sort.h

#ifndef __SORT_H__

#define __SORT_H__

/******************************************************************** ****/

/* 排序头文件 */

/******************************************************************** ****/

/******************************************************************** ****/

/* 头文件包含 */

#include "insertSort.h"

#include "exchangeSort.h"

#include "selectSort.h"

#include "mergeSort.h"

#include "countSort.h"

/********************************************************************

****/

#endif

(1)插入排序:insertSort.h

#ifndef __INSERTSORT_H__

#define __INSERTSORT_H__

/******************************************************************** ****/

/*常用头文件包含*/

#include

using namespace std;

/******************************************************************** ****/

/******************************************************************** ****/

/*插入排序的思想

插入排序属于插入方法的排序算法,它的想法是从第一个元素开始,创建

有序序列,把未排序序列依次插入到有序序列中,以此类推

*/

/******************************************************************** ****/

/*函数实现,按从小到大排序*/

template

void insertSort(vector& v)

{

/*直接插入排序*/

for (unsigned int i = 1; i < v.size(); i++)

{

T tmp = v[i];

int j = i - 1;

while (j >= 0 && v[j] > tmp)

{

v[j+1] = v[j];

j--;

}

v[j+1] = tmp;

}

}

template

void biInsertSort(vector& v)

{

/*折半插入排序*/

for (unsigned int i = 1; i < v.size(); i++) {

T tmp = v[i];

int low = 0;

int high = i - 1;

while (low <= high)

{

int mid = (low + high) / 2;

if (tmp > v[mid])

{

low = mid + 1;

}

else

{

high = mid - 1;

}

}

int j = i - 1;

while (j >= 0 && v[j] > tmp)

{

v[j+1] = v[j];

j--;

}

v[j+1] = tmp;

}

}

template

void binInsertSort(vector& v)

{

/*2_路查找排序*/

vector vecTmp(v);

int first,final,low,high,mid,k,j;

unsigned int i,siz;

siz = v.size();

first = final = 0;

for (i = 1; i < siz; i++)

{

T tmp = v[i];

相关文档
最新文档