排序算法
2015-09-20 09:43
253 查看
选择排序:最直接的排序算法,每次选择一个最大(最小)的元素放到应该的位置
冒泡排序:每次只能比较相邻的两个元素,如果不合适就交换,适用于只有少量数据,没有顺序的场合
插入排序:首先,将头两个元素排序,然后,依次将每个元素排到正确的位置,直到所有的元素都排完
快速排序(n*logn):
1、效率最高的排序算法
2、选出一个分解值,把数组分成两个部分
3、大于等于分解值的元素集中到数组的某部分,小于分解值的元素集中到另一部分
4、对分成的部分分别做同样的操作
//选择排序 for(int i=0;i<len;i++) { int t = i; for (int j=i;j<len;j++) { if (arr[t] > arr[j]) { t = j; } } int temp = arr[i]; arr[i] = arr[t]; arr[t] = temp; }
冒泡排序:每次只能比较相邻的两个元素,如果不合适就交换,适用于只有少量数据,没有顺序的场合
//冒泡1 for (int i=0;i<len;i++) { for (int j=0;j < len-1-i; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } //冒泡2 bool swap = false; do { swap = false; for (int i=0;i<len-1;i++) { if (arr[i] > arr[i+1]) { int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; swap = true; } } } while (swap);
插入排序:首先,将头两个元素排序,然后,依次将每个元素排到正确的位置,直到所有的元素都排完
//插入排序 for(int i=1;i<len;i++) { int t = arr[i]; int j; for (j=i;j>0 && t < arr[j-1];j--) { arr[j] = arr[j-1]; } arr[j] = t; }
快速排序(n*logn):
1、效率最高的排序算法
2、选出一个分解值,把数组分成两个部分
3、大于等于分解值的元素集中到数组的某部分,小于分解值的元素集中到另一部分
4、对分成的部分分别做同样的操作
void sort(int a[],int low,int high) { if (low > high) { return ; } int first = low; int last = high; int key = a[first]; while(first < last) { while(first < last && a[last] >= key) { last--; } a[first] = a[last]; while(first < last && a[first] <=key) { first++; } a[last] = a[first]; } a[first] = key; sort(a,low,first-1); sort(a,first+1,high); }
相关文章推荐
- 代码语言编写技巧
- hdu(2546)——饭卡(背包dp)
- 欧拉函数
- Mysql学习笔记(四)聊聊数据库索引
- C++ 使用模板实现单例模式
- SQLite3使用方法大全(四)之数据库创建、附加、分离
- s5pv210的定时器
- 0916 编程实验一 词法分析程序
- 七个对我最好的职业建议(精简版)
- Myeclipse 破解
- jquery学习笔记(一)—基础语法
- c/c++/boost字符串的学习
- ZOJ 3641 Information Sharing
- Ubuntu update appear GPG problem
- 浅谈IT
- Servlet初始化、运行、销毁全部过程
- NotePad++实现16进制显示文本的方法
- Spring 声明式事务,propagation属性列表及isolation(隔离级别)
- (转)Servlet的生命周期——初始化、运行、销毁全部过程
- android多媒体——6步学会MediaRecorder录音