1.冒泡排序
冒泡排序是O(N^2)复杂度的排序算法,效率较低,需要N趟遍历,每次将候选集中最小的数通过交换浮到最上面;

template <typename Type>
void BubbleSort(vector<Type> &arraySort, int lowIndex, int hightIndex)
{
bool bChange;
for (int i=lowIndex; i<hightIndex; ++i)
{
bChange = false;
for (int j=hightIndex; j>i; --j)
{
if (arraySort[j-] > arraySort[j])
{
swap(arraySort[j-], arraySort[j]);
bChange = true;
}
} if (!bChange)
{
return;
}
}
}

2.选择排序
选择排序就是每次在候选集合中选择最小的数插入到候选结合的开头,并且不断的缩小候选集合的过程,从算法实现的角度讲,就是要进行N词遍历,每次在候选集合中选择最小的数放在候选集合前部的过程,并且不断的缩小候选集。

template <typename Type>
void SelectSort(vector<Type> &arraySort, int lowIndex, int hightIndex)
{
Type tempMinIndex;
for (int i=lowIndex; i<hightIndex; ++i)
{
tempMinIndex = i;
for (int j=i+; j<hightIndex; ++j)
{
if (arraySort[j] < arraySort[tempMinIndex])
{
tempMinIndex = j;
}
} if (tempMinIndex != i)
{
swap(arraySort[tempMinIndex], arraySort[i]);
}
}
}

3.插入排序
每次将一个数插入到有序的集合中,从算法实现的角度讲,就是进行N趟遍历,每次将第i个数插入到前面有序的集合中,最后达到有序。算法的复杂度为O(N^2),在实现时将第i个数与前面的i-1个数进行比较,如果小于就交换,最后插入到合适的位置。

template <tepename Type>
void InsertSort(vector<Type> &arraySort, int lowIndex, int hightIndex)
{
for (int i=lowIndex+; i<hightIndex; ++i)
{
Type tempValue = arraySort[i];
j = i-;
while (j>= && temValue<arraySort[j])
{
arraySort[j+] = arraySort[j];
--j;
}
arraySort[j+] = tempValue;
}
}

4.快速排序
快速排序是最常用的也算是经典的排序算法,它是通过分治递归的方式实现,通过选取哨兵,并将元素与哨兵比较,按照大小将数组切分成两部分,并对这两部分按照同样的方式进行递归计算,最后达到有序。

template <typename Type>
void QuickSort(vector<Type> &arrarSort, int lowIndex, int hightIndex)
{
int i = lowIndex;
int j = hightIndex;
Type tempValue = arraySort[lowIndex]; while (i < j)
{
while (i<j && arraySort[j]>=tempValue)
{
j--;
}
if (i < j)
{
arraySort[i++] = arraySort[j];
} while (i<j && arraySort[i]<tempValue)
{
i++;
}
if (i < j)
{
arraySort[j--] = arraySort[i];
} QuickSort(arraySort, i+, hightIndex);
QuickSort(arraySort, lowIndex; i-);
} arraySort[i] = tempValue;
}

5.归并排序
归并排序也是用分治递归的思想进行求解,想将小块进行排序,然后合并来实现,归并排序的算法复杂度是O(N*logN),空间复杂度是O(N)

template <typename Type>
void Merge(vector<Type> &arraySort, int leftIndex, int midIndex, int rightIndex)
{
int i = leftIndex;
int j = midIndex+;
int n1 = midIndex-leftIndex+;
int n2 = rightIndex-midIndex;
int k = ; Type *tempArray = new Type[n1+n2];
while (i<=midIndex && j<=rightIndex)
{
if (arraySort[i] < arraySort[j])
{
tempArray[k++] = arraySort[i++];
}
else
{
tempArray[k++] = arraySort[j++];
}
} while (i <= midIndex)
{
tempArray[k++] = arraySort[i++];
}
while (j <= rightIndex)
{
tempArray[k++] = arraySort[j++];
} for (int i=; i<n1; ++i)
{
arraySort[leftIndex++] = tempArray[i];
}
tempIndex = midIndex+;
for (int i=; i<n2; ++i)
{
arraySort[tempIndex++] = tempArray[n1+i];
} delete []tempArray;
} template <typename Type>
void MergeSort(vector<Type> &arraySort, int leftIndex, int rightIndex)
{
if (leftIndex < rightIndex)
{
int midIndex = (leftIndex+rightIndex)/;
MergeSort(arraySort, leftIndex, midIndex);
MergeSort(arraySort, midIndex+, rightIndex);
Merge(arraySort, leftIndex, midIndex, rightIndex);
}
}

C/C++ 知识点---排序实现的更多相关文章

  1. JS的十大经典算法排序

    引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript ...

  2. JS中常见排序算法详解

    本文将详细介绍在JavaScript中算法的用法,配合动图生动形象的让你以最快的方法学习算法的原理以及在需求场景中的用途. 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements Java ...

  3. MySQL 基础语句

    MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...

  4. Perl小知识点之排序sort

    脚本这种东西,就是要常用,否则一段时间不用就生疏了,因此决定时时记一些小知识点,一来回顾一下,二来需要的时候可以迅速获得提示. Sort by number You could now write a ...

  5. Acwing 1927 自动补全(知识点:hash,二分,排序)

    读完题目第一想法是trie树 ,不过好像没怎么做过trie树的题,看y总给的知识点是二分排序,所以就有了如下思路: 但是但是,看完其他题解之后才坚定了我的想法,原来真的是这样排序,暴力啊! 具体步骤 ...

  6. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

  7. 一篇夯实一个知识点系列--python实现十大排序算法

    写在前面 排序是查找是算法中最重要的两个概念,我们大多数情况下都在进行查找和排序.科学家们穷尽努力,想使得排序和查找能够更加快速.本篇文章用Python实现十大排序算法. 干货儿 排序算法从不同维度可 ...

  8. 【干货分享】前端面试知识点锦集02(CSS篇)——附答案

    二.CSS部分 1.解释一下CSS的盒子模型? 回答一:a.标准的css盒子模型:宽度=内容的宽度+边框的宽度+加上内边具的宽度b.网页设计中常听的属性名:内容(content).填充(padding ...

  9. 【干货分享】前端面试知识点锦集01(HTML篇)——附答案

    一.HTML部分 1.浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层分别是:HTML.CSS.JavaScript作用:HTML实现页面结构,CSS完成页面的表现与风格 ...

随机推荐

  1. 同网段电脑互ping

    两台同网段的主机(host)之间的网络通信是不经过网关的. 今天试了一下,用一根网线连接两台电脑,然后 在一台电脑上设置: ip地址:192.168.0.1 子网掩码:255.255.255.0 在另 ...

  2. 百度云bcc建站

    一.购买百度云服务 1.百度云bcc购买网页http://bce.baidu.com/product/bcc.html 2.买完后管理:http://console.bce.baidu.com/bcc ...

  3. Opencv探索之路(十九):读写xml和yml文件

    有时候我们处理完图像后需要保存一下数据到文件上,以供下一步的处理.一个比较广泛的需求场景就是:我们对一幅图像进行特征提取之后,需要把特征点信息保存到文件上,以供后面的机器学习分类操作.那么如果遇到这样 ...

  4. CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆)

    CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆) Description 有n个函数,分别为F1,F2,...,Fn.定义 \(Fi(x)=Aix^2+Bix ...

  5. 业余草推荐18个Java开源免费的CMS系统

    1.InfoGlue infoglue是一个高级的.可扩展的.健壮的内容管理系统,完全用Java开发.重要的功能包括完全支持多语言,站点之间良好的重用,以及广泛的集成能力. 该项目主页:http:// ...

  6. 函数响应式编程及ReactiveObjC学习笔记 (-)

    最近无意间看到一个视频讲的ReactiveObjC, 觉得挺好用的 但听完后只是了解个大概. 在网上找了些文章, 有的写的比较易懂但看完还是没觉得自己能比较好的使用RAC, 有的甚至让我看不下去 这两 ...

  7. angularjs-1.3代码学习 模块

    花了点时间,阅读了下angularjs的源码.本次先从模块化开始. angular可以通过module的api来实现前端代码的模块化管理.跟define类似.但不具备异步加载脚本的功能.先从最基本的m ...

  8. (转)sizeof

    数据类型的大小(即所占字节数)以及能够表示的数据范围是与编译器和硬件平台有关的."float.h"头文件(如vc6.0,在include目录下)通常定义了基本数据类型能够表示的数据 ...

  9. ibatis 架构

    从结构图中我们能够看出来ibatis框架中的几个关键的结构: 1.     SqlMapConfig.xml 2.     SqlMap.xml 3.     ParameterObject 4.   ...

  10. HDOJ-2006求奇数的乘积

    Problem Description 给你n个整数,求他们中所有奇数的乘积.   Input 输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数 ...