排序算法

插值排序法 时间复杂度o(n^2) 空间复杂度o(1)
vector<int> arrary;
for(int i = 1; i < arrary.size(); ++i)
{
for(int j = i; j -1 >= 0 && arrary[j] < arrary[j + 1]; --j)
{
swap(arrary, j, j - 1);
}
}

希尔排序 时间复杂度o(n^1.3) 空间复杂度o(1)
vector<int> arrary;
for(int gap = arrary.size()/2; gap > 0; gap/=2)
{
for(int i = gap; i < arrary.size(); ++i)
{
for(int j = i; j - gap >0 && arrary[j] < arrary[j-gap]; j-=gap)
{
swap(arrary, j, j-gap);
}
}
}

冒泡排序 时间复杂度o(n^2) 空间复杂度o(1)
vector<int> arrary;
for(int i = 1; i < arrary.size(); ++i)
{
bool flag = false;
for(int j=0; j < arrary.size() - i; ++j)
{
if(arrary[j] > arrary[j + 1])
{
swap(arrary, j, j+1);
flag=true;
}
}
if(flag) break;
}

选择排序 时间复杂度o(n^2) 空间复杂度o(1)
vector<int> arrary;
for(int i = 1; i < arrary.size(); ++i)
{
int maxpos = arrary.size() - i;
for(int j=0; j < arrary.size() - i; ++j)
{
if(arrary[j] > arrary[maxpos])
maxpos=j;
}
if(maxpos != arrary.size() - i)
swap(arrary, maxpos, arrary.size() - i);
}

插值排序与冒泡排序区别:
插值排序是往已排序区插入当前数,冒泡排序是从未排序区通过相邻数据交换取出最大值放到一端。
插值排序已排序区不稳定,不是最大(最小)的数值排序,冒泡排序已排序区是最大(最小)的数值排序
插值排序在往已排序区插入数据时,只要找到适当地位子就结束,冒泡排序需要变量所有未排序区数据才能确认最大值

选择排序与冒泡排序的区别:
选择排序与冒泡排序本质都是从未排序取取最大(最小)值放到一端,
不同地是选择排序通过遍历所有未排序取数值,取得最大(最小)值下标,然后放到一端,而冒泡排序是通过未排序取相邻数据两两交换得去最大(最小)值放到一端。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,432评论 0 1
  • Sort Algorithm(ASC) [TOC] //怎么生成目录,纠结ing 插入排序 每一趟排序都将待排元素...
    一条小袍袍YoY阅读 459评论 0 1
  • 静寂得像一小疏窗 遥望苍穹 又是那一程斑斓,明亮 星河俯瞰 许我仰望 星空,窥探你的模样 许我触摸 窗楞,抚平你的...
    蓝朵世界阅读 470评论 44 25
  • 说实话,早上起来有些慌张,感觉啥都没有做就是三月下旬了,拿出本子整理了一下这大半个月,以及二月14号开学之后,这一...
    喜欢吃土豆的土豆阅读 146评论 0 0
  • 王明不可一世,十分的嚣张,仗势欺人,好像任何人见到他都必须绕道走一般,但是天赐是个硬茬,王明这次惹到了他,算是碰上...
    陌尘世世阅读 451评论 0 4