您的位置:首页 > 理论基础 > 数据结构算法

【数据结构-L】排序原理

2019-06-01 23:19 120 查看
[code]理想会使人出众。
通向理想的途径往往不尽人意,而你亦会为此受尽磨难。

目录:

比较类型:

  1. 插入排序
  2. 希尔排序
  3. 选择排序
  4. 堆排序
  5. 冒泡排序
  6. 快速排序
  7. 归并排序
  8. 代码实现及结果

>>插入排序

代码及实现: 

[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]);
}
}

>>堆排序 

 

 

 

 

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: