各种排序算法
来源:互联网 发布:sql 2张表合并 编辑:程序博客网 时间:2024/06/05 16:35
算法笔记
一、排序算法的实现
选择排序
选择排序思路:
首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。然后,在剩下的元素中找到最小的元素,将它与数组的第二个位置交换。如此往复,直到将整个数组排序。这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小元素。
源码:
/*** 选择排序* @author UltraVires**///import java.util.Scanner;public class Selection{ public static void sort(Comparable[] a) { // 将 a[] 按升序排列 int N = a.length; for (int i = 0; i < N - 1; ++i) { int min = i; // 最小元素的索引 for (int j = i+1; j < N; ++N) 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; } private static boolean isSorted(Comparable[] a) { int N = a.length; for (int i = 0; i < N - 1; ++i) if ( less(a[i], a[i+1]) ) return true; return false; } private static void show(Comparable[] a) { int N = a.length; for (int i = 0; i < N; ++i) System.out.print(a[i]); System.out.println(); } public static void main(String[] args) { //Scanner reader = new Scanner(new BufferInputStream(System.in)); String[] a = {"C", "A", "D", "B", "E"}; sort(a); assert isSorted(a); // 中断请求,如果排序过程中数组已经有序则中断排序 show(a); }}
插入排序
插入排序思路:
首先,我们认为先前有一个数组是有序的(如果只有一个元素,当然无论如何都是有序的),然后,我们将其后的其它元素一个一个的插入到有序的数组中,使其依然有序。最后,当元素索引到达数组的最右端的时候,排序就完成了。
源代码:
/***插入排序*@author UltraVires**/public class Insertion{ public static void sort(Comparable[] a) { // 将 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-1; (j > 0) && less(a[i], a[j]); --j) exch(a, i, j); } } private static boolean less(Comparable v, Comparable w) { return v.compareTo(k) < 0; } private static void exch(Comparable[] a, int i, int j) { Comparable t = a[i]; a[i] = a[j]; a[j] = t; } private static boolean isSorted(Comparable[] a) { // 判断数组是否已经有序 int N = a.length; for (int i = 1; i < N; ++i) { if ( less(a[i-1], a[i]) ) return true; } return false; } private static void show(Comparable[] a) { int N = a.length; for (int i = 0; i < N; ++i) System.out.print(a[i] + " "); System.out.println(); } public static void main(String[] args) { String[] a = {"C", "A", "D", "B", "E"}; sort(a); assert isSorted(a); // 中断请求,如果排序过程中数组已经有序则中断排序 show(a); }}
希尔排序
希尔排序思路:
希尔排序是一种基于插入排序的快速的排序算法。希尔排序为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。
希尔排序的思想是使数组中任意间隔为 h 的元素都是有序的。这样的数组被称为 h 有序数组。
希尔排序源代码:
/***希尔排序*@author UltraVires **/public class Shell{ public static void sort(Comparable[] a) { // 将 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) { for (int j = i; j >= h && less(a[j], a[j-h]); j -= h) exch(a, j, j-h); } } h = h/3; } private static boolean less(Comparable v, Comparable w) { return v.compareTo(w) < 0; } private static void exch(Comparable[] a, i, j) { Comparable t = a[i]; a[i] = a[j]; a[j] = t; } private static boolean isSorted(Comparable[] a) { int N = a.length; for (int i = 1; i < N; ++i) { if ( less(a[i-1], a[i])) return true; } return false; } private static void show(Comparable[] a) { int N = a.length; for (int i = 0; i < N; ++i) System.out.print(a[i]+" "); System.out.println(); } public static void main(String[] args) { String[] a = {"C", "A", "D", "B", "E"}; sort(a); assert isSorted(a); show(a); }}
0 0
- 【算法】各种排序算法
- 各种排序算法
- 各种排序算法
- 各种排序算法收集
- 各种排序算法
- 各种排序算法小结
- 各种排序算法小结
- 各种内部排序算法!
- 各种排序算法小结
- 各种排序算法
- 各种排序算法
- 各种排序算法介绍
- 各种排序算法
- 各种排序算法比较
- 各种排序算法
- 各种排序算法
- C++各种排序算法
- 各种排序算法
- 最小年龄的三个职工(结构体三级排序)
- 【MSP是什么】MSP的九个治理主题
- elasticsearch的config配置elasticsearch.yml和logging.yml
- java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC 问题
- LeetCode 求和类算法题目 详解(C++)
- 各种排序算法
- spring @responseBody
- 不混淆内部接口
- IDEA中的project和module
- Eclipse配置copyright插入版权信息的详细教程
- 07_05 插入新课程的记录
- SAR图像变化检测的评价指标
- 网址管理
- Android多媒体