各排序算法核心
来源:互联网 发布:信阳南湾鱼 知乎 编辑:程序博客网 时间:2024/06/03 20:12
1.插入排序
//第一个默认有序for(int i = 1; i < a.length; i++){//从后往前for(int j = i-1; j >= 0; j--){if(a[j]>a[i]){exch(a, i, j);i--;}}}2.选择排序
for (int i = 0; i < a.length; i++){int min = i;//剩下的里面找最小的for (int j = i + 1; j < N; j++)if (a[j]<a[min])min = j;//放前面exch(a, i, min);}3.冒泡排序
//每次确定一个最大的,直到倒数第二小的for(int i = a.length-1; i > 0; i--){for(int j = 0; j < i; j++){if(a[j] > a[j+1])exch(a, j, j+1);}}插入排序就是打牌的时候理牌的习惯,选择排序思想最白痴,每次找个最小的,冒泡排序实现过程像插入排序,因为exch,从外部看更像选择,每次确定一个最大的。
4.希尔排序
希尔排序就是插入排序的改进版,先把数组按间隔分,然后用插入排序,在减小间隔继续插入排序直到间隔为1。
5.归并排序
public static Comparable[] aux;public static void sort(Comparable[] a){aux = new Comparable[a.length];sort(a, 0, a.length - 1);}public static void sort(Comparable[] a, int l, int h){if (h <= l)return;int m = l + (h - l)/2;sort(a, l, m);sort(a, m+1, h);merge(a, l, m, h);}public static void merge(Comparable[] a, int l, int m, int h){int i = l;int j = m + 1;for (int k = l; k < a.length; k++)aux[k] = a[k];for (int k = l; k <= h; k++){if (i > m)a[k] = aux[j++];else if (j > h)a[k] = aux[i++];else if (less(aux[i], aux[j]))a[k] = aux[i++];else a[k] = aux[j++];}}6.快速排序
public static void sort(Comparable[] a){//此处应该有打乱sort(a, 0, a.length -1);}private static void sort(Comparable[] a, int l, int h){if (h <= l)return;int j = partition(a, l, h);sort(a, l, j-1);sort(a, j+1, h);}private static int partition(Comparable[] a, int l, int h){int i = l, j = h + 1;Comparable v = a[l];while(true){while (less(a[++i], v))if (i == h) break;while (less(v, a[--j]))if (j == l) break;if (i >= j)break;exch(a, i, j);}exch(a, l, j);return j;}public static void sort(Comparable[] a){aux = new Comparable[a.length];sort(a, 0, a.length - 1);}
阅读全文
0 0
- 各排序算法核心
- 监控点排序核心算法
- java冒泡排序、选择排序、插入排序算法的核心思想及其比较
- 各排序算法实现
- 各大排序算法
- 各排序算法
- 各排序算法总结
- 各排序算法总结
- 各排序算法链接
- 各排序算法复杂度
- 各排序算法对比
- 各大排序算法
- 冒泡排序核心教程
- 拓扑排序核心代码
- 五子棋的核心算法
- 五子棋的核心算法
- 五子棋的核心算法
- 五子棋的核心算法
- 关于Java中对于jsp文件的浅认识?
- 欢迎使用CSDN-markdown编辑器
- 架设属于自己的高性能Shadowsocks服务器
- 学习笔记——JAVA设计模式<17>访问者模式
- xshell的快捷键
- 各排序算法核心
- java正则表达式(详解)
- 使用Eclipse配置python环境并创建实例
- 基于安卓前端车牌识别OCR开发
- 主题四 指针和数组(下)----26.多维数组与多维指针
- C#使用socket实现FTP、POP3、SMTP的客户端 (一)
- 线程安全与非线程安全
- 对PHP中依赖注入和控制反转的理解
- 17. 编写函数,将字符串中下标为奇数的字符按ASCII码升序排列