【数据结构-L】排序原理
2019-06-01 23:19
120 查看
[code]理想会使人出众。 通向理想的途径往往不尽人意,而你亦会为此受尽磨难。
目录:
比较类型:
- 插入排序
- 希尔排序
- 选择排序
- 堆排序
- 冒泡排序
- 快速排序
- 归并排序
- 代码实现及结果
>>插入排序
代码及实现:
[code]//插入排序 void InsertSort(int* array, int size) { for (int i = 1; i < size; ++i) { //待插入的元素 int key = array[i]; //找key的插入位置:与前面已经排序好的元素从后往前比较 int end = i - 1; while (end >= 0 && key < array[end])//保证end在里面绝对有效 { array[end + 1] = array[end]; end -= 1; } //插入元素 array[end + 1] = key; } }
>>希尔排序
代码及实现:
[code]//时间复杂度O(N^1.25--1.6N^1.25) //希尔排序 void ShellSort(int* array, int size) { //int gap = 3; int gap = size; while (gap > 0) { for (int i = gap; i < size; ++i) { //待插入的元素 int key = array[i]; gap = gap / 2 + 1; //取素数法 //找key的插入位置:与前面已经排序好的元素从后往前比较 int end = i - gap; while (end >= 0 && key < array[end])//保证end在里面绝对有效 { array[end + gap] = array[end]; end -= gap; } //插入元素 array[end + gap ] = key; } gap -= 1; } }
>>选择排序
代码及实现:
[code]//选择排序: //时间复杂度:O(N^2) //空间复杂度:O(1) //稳定性:不稳定 //缺陷:进行了重复比较 void SelectSort(int* array, int size) { for (int i = 0; i < size - 1; ++i) { int maxPos = 0; for (int j = 1; j < size - i; ++j) { if (array[j] > array[maxPos]) maxPos = j; } if (maxPos != size-i-1) Swap(&array[maxPos], &array[size-i-1]); } }
>>堆排序
相关文章推荐
- 数据结构-4-Trie树:应用于统计、排序与搜索 原理详解
- MySQL索引背后的数据结构及算法原理
- 把二元查找树转变成排序的双向链表[数据结构]
- 【数据结构】直接插入排序_哨兵位
- 数据结构-快速排序 java实现
- 【东东学数据结构】快速排序
- 数据结构复习之【排序】
- Java数据结构-数组(二分查找、冒泡排序、选择排序、插入排序)
- C++代码,数据结构-内部排序-插入排序-直接插入排序
- 【数据结构】选择排序
- Java数据结构----树--二叉查找(搜索或排序)树BST
- 数据结构顺序表的操作全集(创建,遍历,插入,删除,排序等等)
- 数据结构----快速排序
- 数据结构--排序
- MySQL索引背后的数据结构及算法原理
- 数据结构与程序设计 第一章 编成原理 总结
- HashMap的实现原理和底层数据结构
- 快速排序的两种实现方式,主要是Partition函数的实现原理不一样
- C语言基本数据结构之五(折半插入,堆排序,冒泡排序,快速排序,并归排序)
- 【数据结构】C# 面向对象思想完成三种排序