C++排序算法总结及性能大致分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
{
/*直接插入排序*/
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
{
/*折半插入排序*/
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
{
/*2_路查找排序*/
vector
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];