排序算法
来源:互联网 发布:申请哥伦比亚大学知乎 编辑:程序博客网 时间:2024/06/05 21:54
1.插入排序
就是一个一个的对已排好序的序列比较,直至找到第一个比它小的数,比它大的数都要向后移一位,O(n*n)
void InsertSort(int a[], int len){ for (int i = 1; i < len; i++) { int key = a[i]; int j; for (j = i - 1; j >= 0; j--) { if (a[i] < a[j]) a[j + 1] = a[j]; else break; } a[j + 1] = key; } for (int i = 0; i < len; i++) cout << a[i] << " ";}
2.冒泡排序 (每次最后一位有序)
for (int i = 0; i < n;i++) for (int j = 0; j < n - i-1; j++) { if (a[j]>a[j + 1]) { int tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; } }
3.选择排序(每次第一位有序)
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (a[j] < a[i])
swap(a[j], a[i]);
}
}
4.快速排序(挑选基准,每次基准有序)
void QuickSort(int a[],int n,int first,int last){ if (first < last) { int key = a[first]; int start = first; int end = last; while (start < end) { while (start < end&&a[end] >= key) end--; a[start] = a[end]; while (start < end&&a[start] < key) start++; a[end] = a[start]; } a[start] = key; QuickSort(a, n, first, start - 1); QuickSort(a, n, start + 1, last); } }
5.堆排序
最大堆 每个节点大于它的左右节点,输出根节点,根节点用最后一个节点替换,再保证最大根,循环输出即可
6.归并排序
由于将两个有序序列合并的时间复杂度为a+b
将原序列不断地一分为二,共有log n,然后再将它们依次合并,每次的复杂度为n
总的复杂度为nlogn
阅读全文
0 0
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- JQuery Layer应用示例
- 设计模式之观察者模式
- 特殊的Daemon线程
- 元素等待————显式等待二
- 数字电路时序分析(二)
- 排序算法
- fastjson的基本使用方法
- 强化学习简明教程
- 数据结构之哈夫曼树
- 使用ElasticSearch完成百万级数据查询附近的人功能
- 【自用】 javanote170727(类与对象、构造方法、修饰符、变量的作用域)
- HDU 6040 Hints of sd0061 (技巧)
- Unity3D之Mecanim动画系统学习笔记(五):Animator Controller
- codeforces 118B Present from Lena