整理了几种常用的排序算法,留着自己看看
2012-08-15 12:05
274 查看
public class Sort { public static void main(String[] args) { int[] a = { 8, 7, 3, 5, 4, 2, 1, 6 }; //bubbleSort2(a); //print(a); mineQuickSort(a, 0, a.length-1); display(a); } private static void display(int[] a) { for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); } /** * 直接插入排序 * * @param a * @author wyq */ public static void insertSort(int[] a) { int temp; int n = a.length; for (int i = 0; i < n - 1; i++) { temp = a[i + 1]; int j = i; while (j > -1 && a[j] > temp) { a[j + 1] = a[j]; j--; } a[j + 1] = temp; } } /** * 直接选择排序 * * @param a * @author wyq */ public static void selectSort(int[] a) { int i, j, small; int temp; int n = a.length; for (i = 0; i < n; i++) { small = i; for (j = i + 1; j < n; j++) if (a[j] < a[small]) small = j; if (small != i) { temp = a[i]; a[i] = a[small]; a[small] = temp; } } } /** * 冒泡排序1 * * @param a * @author wyq */ public static void bubbleSort(int[] a) { int n = a.length; int temp; for (int i = 0; i < n; i++) { for (int j = n - 1; j > i; j--) { if (a[j] < a[j - 1]) { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; } } } } /** * 冒泡排序2 * * @param a * @author wyq */ public static void bubbleSort2(int[] a) { int n = a.length; int temp, flag = 1; for (int i = 1; i < n && flag == 1; i++) { flag = 0; for (int j = 0; j < n - i; j++) { if (a[j] > a[j + 1]) { flag = 1; temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } } public static void quickSort(int[] a, int low, int high) { int i, j; int temp; i = low; j = high; temp = a[low]; while (i < j) { // 在数组的右端扫描 while (i < j && temp <= a[j]) j--; if (i < j) { a[i] = a[j]; i++; } // 在数组的左端扫描 while (i < j && a[i] < temp) i++; if (i < j) { a[j] = a[i]; j--; } } a[i] = temp; if (low < i) quickSort(a, low, i - 1); // 对左端子集合递归 if (i < high) quickSort(a, j + 1, high); // 对右端子集合递归 } /** * * @param a * @param left * @param right * @return 中值 */ public static int partition(int[] a, int left, int right) { int temp = a[left]; while (left<right) { while (left<right && temp<a[right]) right --; a[left] = a[right]; while (left<right && temp>a[left]) left++; a[right] = a[left]; } a[left] = temp; return left; } /** * 另一种快速排序 * @param a * @param left * @param right */ public static void mineQuickSort(int[] a, int left, int right) { if (left<right) { int middle = partition(a, left, right); mineQuickSort(a, left, middle-1); mineQuickSort(a, middle+1, right); } } }
研究算法真是锻炼人的逻辑思维能力。
相关文章推荐
- 自己整理的几种常见排序算法,及时间复杂度空间复杂度。c++编程
- java 数组的几种常用排序算法
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
- 眼睛直观感受几种常用排序算法
- 自己不常用的PHP函数整理
- java中几种常用的排序算法
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 几种常用的排序算法
- 算法整理——常用排序算法
- 自己学习整理的常用知识点代码demo
- Python - 常用的几种排序算法总结
- 几种常用的排序算法总结
- 读取视频帧的几种方法(自己整理)
- 【轻松学排序算法】眼睛直观感受几种常用排序算法
- java中几种常用的排序算法
- 几种常用的排序算法
- Java的几种常用排序算法分析
- 【轻松学排序算法】眼睛直观感受几种常用排序算法
- 几种常用排序算法温习
- 几种常用排序算法