算法(2.1 初级排序)
来源:互联网 发布:淘宝打假部门联系方式 编辑:程序博客网 时间:2024/06/06 06:35
重新读算法这本书,把代码写一下,做好博客
排序算法类模板
public class Example { public static void sort(Comparable[] a){ } private static boolean less(Comparable v, Comparable w){ return v.compareTo(w) < 0; } private static void exch(Comparable[] a, int i, int j){ Comparable t = a[i]; a[i] = a[j]; a[j] = t; } private static void show(Comparable[] a){ for (int i=0; i<a.length; i++){ System.out.print(a[i] + " "); } System.out.println(); } public static boolean isSorted(Comparable[] a){ for (int i=1; i<a.length; i++){ if (less(a[i], a[i-1])){ return false; } } return true; } public static void main(String[] args) { int N = 10; Integer[] a = new Integer[N]; for (int i=0; i<N; i++){ a[i] = (int)(Math.random()*100); } sort(a); assert isSorted(a); show(a); } }
2.1.2 选择排序
// 2.1.2 选择排序//一种最简单的排序算法是这样的:首先,找到数组中最小的那个元素,//其次将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和它自己交换)。//再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。//这种方法叫做选择排序,因为它在不断选择剩余元素之中的最小者。////结论:不管数组初始状态怎样所需时间都是一样的////2017年8月3日20:46:24public class Selection{public static void sort(Comparable[] a){//按数组升序排列int N = a.length;for (int i=0; i<N; i++){int min = i;//最小数组的索引for (int j=i+1; j<N; j++){if (less(a[j], a[min])){min = j;}}exch(a, i, min);}}// less() exch() isSorted()和main() 方法见“排序算法类模板”}
2.1.3 插入排序
// 2.1.3 插入排序//通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。//在计算机的实现中,为了给要插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动以为。//这种算法叫做插入排序////下面是几种典型的部分有序的数组://1.数组中的每个元素距离它的最终位置都不远//2.一个有序的大数组接一个小数组//3.时更要注意中只有几个元素的位置不正确//插入排序对这样的数组很有效,而选择排序不然。//事实上,当倒置的数量很少时,插入排序很可能比本章中的其他任何算法要快。////2017年8月3日21:21:48public class Insertion{public static void sort(Comparable[] a){//按数组升序排列int N = a.length;for (int i=1; i<N; i++){//将a[i]插入到a[i-1]、a[i-2]、a[i-3]...之中for (int j=i; j>0 && less(a[j], a[j-1]); j--){exch(a, j, j-1);}}}// less() exch() isSorted()和main() 方法见“排序算法类模板”}
2.1.6 希尔排序
// 2.1.6 插入排序//希尔排序的思想是使数组中任意间隔为h的元素都是有序的。//这样的数组被称为h有序数组。换句话说,一个h有序数组就是h个互相独立的有序数组编织在一起组成的一个数组。//在进行排序时,如果h很大,我们就能将元素移动到很远的地方,为实现更小的h有序创造方便。//用这种方式,对于任意以1结尾的h序列,我们都能够将数组排序。这就是希尔排序////算法2.3的实现使用了1/2(3的k次方-1),从N/3开始递减至1.我们把这个序列称为递增序列////2017年8月3日22:50:47public class Shell{public static void sort(Comparable[] a){//按数组升序排列int N = a.length;int h = 1;while (h < N/3){h = 3*h + 1;}while (h >= 1){//将数组变为h有序for (int i=h; i<N; i++){//将a[i]插入到a[i-h]、a[i-h]、a[i-h]...之中for (int j=i; j>=h && less(a[j], a[j-h]); j-=h){exch(a, j, j-h);}}h /= 3;}}// less() exch() isSorted()和main() 方法见“排序算法类模板”}
阅读全文
0 0
- 算法(2.1 初级排序)
- (算法)初级排序算法
- 初级算法排序(一)
- 初级排序算法(algs4)
- 初级排序算法(二)
- 《算法》阅读笔记-2.1初级排序算法
- 算法手记(5)初级排序算法
- 初级排序算法(选择排序、插入排序、希尔排序)
- 第二章 2.1初级排序算法
- 冒泡排序算法(初级版)
- 初级排序算法(选择、插入、Shell)
- 初级排序算法实现
- 初级排序算法总结
- 初级排序算法
- 排序算法之初级排序
- 排序算法之初级排序
- 初级排序算法(选择、插入、冒泡排序)
- 算法学习(1)——初级排序算法
- 使用python执行linux命令
- ios::sync_with_stdio(false) 改变C++流输入输出的速度
- java读取配置文件
- 根据屏幕上的触摸生成平面方程
- 顺序栈的基本操作
- 算法(2.1 初级排序)
- Angular 4 依赖注入教程之一 依赖注入简介
- React-Native-动画基础-抽奖转盘
- Linux 常用命令(二)
- HDU1166树状数组
- struts2框架学习笔记03
- 编程语言—专业词汇理解
- HDU6069---Counting Divisors(2017多校联赛:数学)
- 终于在开发中用到自己的继承了、多态了