Java常用排序

  1 /**
  2  * Java常用排序
  3  * @author LiTaiQing
  4  *
  5  */
  6 public class SortTest {
  7
  8     /*
  9      * 直接插入排序
 10      * 基本思想:
 11      *         在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,
 12      *         现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。
 13      *         如此反复循环,直到全部排好顺序
 14      */
 15     public static void insertSort(int[] arr){
 16         for(int i = 1; i < arr.length; i++){
 17             int j = i -1;
 18             for(;j > 0 && arr[i] < arr[j];j--){
 19                 arr[j+1] = arr[j];
 20             }
 21             arr[j+1] = arr[i];
 22         }
 23     }
 24
 25     /*
 26      * 简单快速排序
 27      * 基本思想:
 28      *         在要排序的一组数中,选出最小的一个数与第一个位置的数交换;
 29      *         然后在剩下的数当中再找最小的与第二个位置的数交换,
 30      *         如此循环到倒数第二个数和最后一个数比较为止。
 31      */
 32     public static void selectSort(int[] arr){
 33         for(int i = 0; i < arr.length - 1; i++){
 34             for(int j = i + 1;j < arr.length ; j++){
 35                 if(arr[i] > arr[j]){
 36                     arr[i] ^= arr[j];
 37                     arr[j] ^= arr[i];
 38                     arr[i] ^= arr[j];
 39                 }
 40             }
 41         }
 42     }
 43
 44     /*
 45      * 冒泡排序
 46      * 基本思想:
 47      *         在要排序的一组数中,对当前还未排好序的范围内的全部数,
 48      *         自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
 49      *         即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
 50      */
 51     public static void bubbleSort(int[] arr){
 52         for(int i = 0; i < arr.length - 1; i++){
 53             for(int j = 0; j < arr.length - 1 - i; j++){
 54                 if(arr[j] > arr[j+1]){
 55                     arr[j] += arr[j+1];
 56                     arr[j+1] = arr[j] - arr[j+1];
 57                     arr[j] -= arr[j+1];
 58                 }
 59             }
 60         }
 61     }
 62
 63     /*
 64      * 希尔排序(最小增量排序)
 65      * 基本思想:
 66      *         算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,
 67      *         每组中记录的下标相差d.对每组中全部元素进行直接插入排序,
 68      *         然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。
 69      *         当增量减到1时,进行直接插入排序后,排序完成。
 70      */
 71     public static void shellSort(int[] arr){
 72         int j = 0;
 73         int temp = 0;
 74         for (int increment = arr.length / 2; increment > 0; increment /= 2) {
 75             for (int i = increment; i < arr.length; i++) {
 76                 temp = arr[i];
 77                 for (j = i; j >= increment; j -= increment) {
 78                     if(temp > arr[j - increment]){
 79                         arr[j] = arr[j - increment];
 80                     }else{
 81                         break;
 82                     }
 83                 }
 84                 arr[j] = temp;
 85             }
 86         }
 87     }
 88
 89     /*
 90      * 输出
 91      */
 92     public static void out(int[] arr){
 93         System.out.print("[");
 94         for(int i =0; i < arr.length - 2; i++){
 95             System.out.print(arr[i]+",");
 96         }
 97         System.out.println(arr[arr.length-1]+"]");
 98     }
 99
100 }
时间: 2024-08-03 23:58:15

Java常用排序的相关文章

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

Java 常用排序算法/程序员必须掌握的 8大排序算法

Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n 个数插到前

[转]Java 常用排序算法/程序员必须掌握的 8大排序算法

本文转自:http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.

Java常用排序算法/程序员必须掌握的8大排序算法

转载自http://blog.csdn.net/qy1387/article/details/7752973 分类: 1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序.    [java] view plain copy print? // 排序原始数据 private static final

Java常用排序算法实现

目录 目录 概述 插入排序 希尔排序 简单排序 堆排序 冒泡排序 快速排序 源码 概述 这里总的给出了几种常用的排序算法,也是当作复习和巩固. 插入排序 希尔排序 简单排序 堆排序 冒泡排序 快速排序 以上几个都是根据排序的原理和原则自定义实现的.对于同一个排序实际的实现过程可能有一些不同,但思想和处理方式是相同的. 插入排序 基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环,直到全部

java常用排序算法

在各类算法中,排序算法是最基本的内容.在这里主要分享一个冒泡排序,选择排序,插入排序,希尔排序,快速排序和堆排序以及合并排序. 1.冒泡排序 这里是最基础的了,不用多说. public static void bubbleSort(int[] a){ int temp; for(int i=1;i<a.length;i++){ for(int j=0;j<a.length-i;j++){ if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=te

Java常用三种算法排序比较

Java常用三种算法排序比较 冒泡排序: package demo1; /** * * @author xiaoye 2014-5-13 */ /** * 有N 个数据需要排序,则从第0 个数开始,依次比较第0 和第1 个数据, * 如果第0 个大于第1 个则两者交换,否则什么动作都不做,继续比较第 1 个第2个-, * 这样依次类推,直至所有数据都"冒泡"到数据顶上. 冒泡排序的效率 O(N*N ),比较 N*N/2 ,交换N*N/4 . */ public class Bubble

Java基础 —— Java常用类

Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@"+哈希码(一般用于覆盖). equals()方法:返回"=="操作的布尔值(一般用于覆盖). finalize()方法:用于对象的销毁(不受人为控制,由JVM调用,遵从垃圾回收机制). clone()方法:用于对象之间的拷贝(深拷贝). getClass()方法:返回对象的字节码文件对

java常用代码优化

摘要: 本文大多技术围绕调整磁盘文件 I/O,但是有些内容也同样适合网络 I/O 和窗口输出. 第一部分技术讨论底层的I/O问题,然后讨论诸如压缩,格式化和串行化等高级I/O问题.然而这个讨论没有包含应用设计问题,例如搜索算法和数据结构,也没有讨论系统级的问题,例如文件高速缓冲. Java语言采取两种截然不同的磁盘文件结构.一个是基于字节流,另一个是字符序列.在Java 语言中一个字符有两个字节表示,而不是像通常的语言如c语言那样是一个字节.因此,从一个文件读取字符时需要进行转换.这个不同在某些