选择排序和插入排序
2016-06-03 13:31
393 查看
选择排序
选择排序的设计思路是每次内层循环找出最小值放在上次最小值的后面来实现排序算法复杂度:O(N*N)
它的两个鲜明的特点:
1.运行时间和输入没有关系
2.数据移动式最少的,每次交换只改变两个元素的值,交换次数和数组大小是线性关系
代码实现如下:
import edu.princeton.cs.algs4.StdOut; public 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;j<N;j++){ if(less(a[j],a[min])) min = j; } exch(a, i, min); } } 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; } public static void show(Comparable[] a){ for(int i = 0;i<a.length;i++) StdOut.print(a[i] + " "); StdOut.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; } }
插入排序
插入排序类似于整理桥牌,将一张牌插入到有序牌的适当位置。适用范围:适用于数组中倒置的数量很少的时候,对部分有序的数组十分 高效,也适合小规模数组
时间复杂度是O(n*n),虽然两中排序方法复杂度都是平方级别的,但是对于随机排序的无重复主键的数组,插入排序稍稍比选择排序快一点因为选择排序在第二重循环时不需要全部遍历数组,而选择排序为了选出最大值或最小值会全部遍历。
代码实现如下:
import edu.princeton.cs.algs4.StdOut; public class Insertion { public static void sort(Comparable[] a){ int N = a.length; for(int i = 1;i<N;i++){ for(int j = i; j>0 && less(a[j],a[j-1]);j--) exch(a,j,j-1); } } 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; } public static void show(Comparable[] a){ for(int i = 0;i<a.length;i++) StdOut.print(a[i] + " "); StdOut.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[]){ String[] a = {"tu", "35", "678", "qg"}; sort(a); show(a); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- JavaScript演示排序算法
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序