排序算法总结(Java)
2015-09-11 16:02
615 查看
1 插入排序
1.1、直接插入排序
package org.com.sort; public class InsertSort { public static void insert_sort(int a[], int n) { for(int i = 1; i < n; i++) { if(a[i] < a[i-1]) { int j = i - 1; int temp = a[i]; while(j >= 0 && a[j] > temp) { a[j+1] = a[j]; j--; } a[j+1] = temp; } } } public static void main(String[] args) { int a[] = {4,3,2,1}; insert_sort(a, a.length); for(int i = 0; i < a.length; i++) { System.out.print(a[i] + "\t"); } System.out.println(); } }
1.2 希尔排序
标准希尔排序:package org.com.sort; public class ShellInsertSort { public static void shell_insert_sort1(int a[], int n) { for(int dk = n/2; dk > 0; dk /= 2) { for(int i = 0; i < dk; i++) { for(int j = i + dk; j < n; j += dk) { if(a[j] < a[j-dk]) { int temp = a[j]; int k = j - dk; while(k >= 0 && a[k] > temp) { a[k+dk] = a[k]; k -= dk; } a[k + dk] = temp; } } } } } public static void main(String[] args) { int a[] = {3,4,6,3,1,7,9,4}; shell_insert_sort1(a, a.length); for(int i = 0; i < a.length; i++) { System.out.print(a[i] + "\t"); } System.out.println(); } }
上述希尔排序虽然容易理解,但代码不够简洁,下述为从dk-n直接的按照dk长度进行排序:
package org.com.sort; public class ShellInsertSort { public static void shell_insert_sort2(int a[], int n) { for(int dk = n/2; dk > 0; dk /= 2) { for(int i = dk; i < n; i++) { if(a[i] < a[i - dk]) { int temp = a[i]; int j = i - dk; while(j >= 0 && a[j] > temp) { a[j + dk] = a[j]; j -= dk; } a[j + dk] = temp; } } } } public static void main(String[] args) { int a[] = {3,4,6,3,1,7,9,4}; shell_insert_sort2(a, a.length); for(int i = 0; i < a.length; i++) { System.out.print(a[i] + "\t"); } System.out.println(); } }
2 选择排序
2.1 直接选择排序
package org.com.sort; public class SimpleSelectSort { public static void simple_select_sort(int a[], int n) { for(int i = 0; i < n; i++) { int index = i; for(int j = i + 1; j < n; j++) { if(a[index] > a[j]) { index = j; } } if(i != index) { int temp = a[i]; a[i] = a[index]; a[index] = temp; } } } public static void main(String args[]) { int a[] = {3,12,6,3,0,7,9,4, 1, 10, 78}; simple_select_sort(a, a.length); for(int i = 0; i < a.length; i++) { System.out.print(a[i] + "\t"); } System.out.println(); } }
2.1 堆排序
package com.sort2.select; public class HeapSort { public static void heapAdjust(int a[], int i , int size) { int lchild = 2 * i + 1; int rchild = 2 * i + 2; int max = i; if(lchild < size) { if(rchild < size && a[max] < a[rchild]) max = rchild; if(a[max] < a[lchild]) max = lchild; if(i != max) { int temp = a[i]; a[i] = a[max]; a[max] = temp; heapAdjust(a, max, size); } } else { return ; } } public static void buildHeap(int a[], int size) { for(int i = size / 2; i >= 0; i--) { heapAdjust(a, i, size); } } public static void heap_sort(int a[], int size) { buildHeap(a, size); for(int i = size - 1; i >= 0; i--) { int temp = a[0]; a[0] = a[i]; a[i] = temp; heapAdjust(a, 0, i); } } public static void main(String args[]) { int a[] = {4,5,2,8,9,1,8,3,0}; heap_sort(a, a.length); for(int i = 0; i < a.length; i++) { System.out.print(a[i] + "\t"); } System.out.println(); } }
3 交换排序
3.1 冒泡排序
package com.sort2.change; public class BubbleSort { public static void bubble_sort(int a[], int n) { for(int i = 0; i < n; i++) { for(int j = 0; j < n - i - 1; j++) { if(a[j] > a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } } public static void main(String args[]) { int a[] = {4,5,2,8,9,1,8,3,0}; bubble_sort(a, a.length); for(int i = 0; i < a.length; i++) { System.out.print(a[i] + "\t"); } System.out.println(); } }
3.2 快速排序
package com.sort2.change; public class QuitSort { public static void quik_sort(int a[], int left, int right) { if(left >= right) return ; int i = left; int j = right; int temp = a[i]; while(i < j) { while(i < j && a[j] >= temp) j--; if(i < j) a[i++] = a[j]; while(i < j && a[i] <= temp) i++; if(i < j) a[j--] = a[i]; } a[i] = temp; quik_sort(a, left, i - 1); quik_sort(a, i+ 1, right); } public static void main(String args[]) { int a[] = {4,5,2,8,9,1,8,3,0}; quik_sort(a, 0, a.length - 1); for(int i = 0; i < a.length; i++) { System.out.print(a[i] + "\t"); } System.out.println(); } }
相关文章推荐
- Maven学习笔记(四)——MyEclipse导入、创建&配置Maven工程
- eclipse中jsp的formatter优化
- Spring学习(十四)Spring中如何使用事务?
- MyEclipse快捷键及经验总结 绝对的有用 太给力了
- WebService学习笔记(四)Map等非JavaBean类型传输
- POJO和JavaBean的区别
- JBPM——MyEclipse开发环境的搭建
- java之二篇:java相对其它语言-栈更体现得淋漓尽致
- java.net.ConnectException: Connection timed out: connect 错误
- 由Java里static引发的感受
- java.lang.OutOfMemoryError解决办法
- [Java] IO 流的学习
- JDK 源码 -- SET
- jdk7之fork-join
- springMVC(10) springMVC参数传递(封装对象接收参数)
- springMVC(9) springMVC参数传递
- java多线程的共享变量访问控制实例
- java反射机制
- java类的加载过程
- java类加载器