Java 排序

public static void main(String[] args) {
    int[] array = { 42, 20, 17, 13, 28, 14, 23, 15,3 };
    Test test = new Test();
    // test.bubbleSort(array);
    // test.selctionSort(array);
    // test.insertionSort(array);
    test.shellSort(array);
}

/**
 * 冒泡排序 - 遍历所有未排好序的数据,两两比较大小,把较小的往前移动
 *
 * @param array
 */
public void bubbleSort(int[] array) {
    System.out.println("冒泡排序");
    int length = array.length;
    for (int i = 0; i < length - 1; i++) {
        for (int j = length - 1; j > i; j--) {
            if (array[j - 1] > array[j]) {
                array[j - 1] += array[j];
                array[j] = array[j - 1] - array[j];
                array[j - 1] -= array[j];
            }

        }
        System.out.println();
        System.out.println(Arrays.toString(array));
    }
}

/**
 * 选择排序 - 遍历所有未排好序的数据,记录数组中最小值的下标最后和未排序的最小下标交换数据
 *
 * @param array
 */
public void selctionSort(int[] array) {
    System.out.println("选择排序");
    int length = array.length;
    for (int i = 0; i < length - 1; i++) {
        int index = i;
        for (int j = i + 1; j < length; j++) {
            if (array[index] > array[j]) {
                index = j;
            }
        }
        if (index != i) {
            array[i] += array[index];
            array[index] = array[i] - array[index];
            array[i] -= array[index];
        }
        System.out.println();
        System.out.println(Arrays.toString(array));
    }
}

/**
 * 插入排序 - 遍达未排序的前N个数据进行冒泡排序,N由循环决定
 *
 * @param array
 */
public void insertionSort(int[] array) {
    System.out.println("插入排序");
    int length = array.length;
    for (int i = 0; i < length - 1; i++) {
        for (int j = i + 1; j > 0; j--) {
            if (array[j - 1] > array[j]) {
                array[j - 1] += array[j];
                array[j] = array[j - 1] - array[j];
                array[j - 1] -= array[j];
            }
        }
        System.out.println();
        System.out.println(Arrays.toString(array));
    }
}

/**
 * 希尔排序 - 对子序列分别进行排序
 *
 * @param array
 */
public void shellSort(int[] array) {
    System.out.println(Arrays.toString(array));
    int lenth = array.length;
    int incre = lenth;
    while (true) {
        incre = incre / 2;
        for (int k = 0; k < incre; k++) { // 根据增量分为若干子序列
            for (int i = k + incre; i < lenth; i += incre) {
                for (int j = i; j > k; j -= incre) {
                    if (array[j] < array[j - incre]) {
                        array[j - incre] += array[j];
                        array[j] = array[j - incre] - array[j];
                        array[j - incre] -= array[j];
                    } else {
                        break;
                    }
                }
            }
        }
        System.out.println();
        System.out.println(Arrays.toString(array));
        if (incre == 1) {
            break;
        }
    }
}
时间: 2024-11-09 06:09:55

Java 排序的相关文章

JAVA排序

对于JAVA排序需要实现Comparator接口,来指定按什么顺序来排序,集合类用Collections.sort方法,数组用Array.sort方法,默认按升序排序 public class Music { private String filename; private String title; private int during; private String singer; private String type; private String size; private Strin

java排序学习笔记

前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码.想想,还是javascript写起来方便: java的话,我想到的方法是写一个抽象类:抽象出排序方法,实现一个排序计时方法(该方法调用了抽象排序,但在先后排序时加入计时代码[感觉像是aop操作]): 接着所有排序类都继承这个抽象类,并实现排序方法,调用的时候直接调用继承的排序计时方

java排序之插入排序(直接插入排序和希尔排序)

上面一片博文探讨了关于的java选择排序(冒泡排序和快速排序)本章将继续探讨java排序之插入排序,插入排序分为直接插入排序和希尔排序两种. 1.直接插入排序思想:在需要排序的一组数据中假设前该数组的前n-1(n >= 2)个数是已经排好序的,现在要把第n个数插入到前面的n-1个数中,使得这n个数也是排好顺序的.如此反复进行,知道n等于需要排序的数组的长度时.就实现了该数组的直接插入排序. 代码如下: /** * * @param a 需要排序的数组 */ public static void

java排序集锦

java实现排序的一些方法,来自:http://www.javaeye.com/topic/548520 1 package sort; 2 3 import java.util.Random; 4 5 /** 6 * 排序测试类 7 * 8 * 排序算法的分类如下: 1.插入排序(直接插入排序.折半插入排序.希尔排序): 2.交换排序(冒泡泡排序.快速排序): 9 * 3.选择排序(直接选择排序.堆排序): 4.归并排序: 5.基数排序. 10 * 11 * 关于排序方法的选择: (1)若n较

Java排序算法(一)

Java排序算法(一) 一.排序的基本概念和分类 1.1排序的定义 在<大话数据结构>中,排序定义为,假设含有n个记录的序列为{r1,r2,...,rn},其相应的关键字{k1,k2,...,kn},需确定1,2...n的一种排列p1,p2...pn,是其相应的关键字满足Kp1<=Kp2<=...<=Kpn(非递减或非递增)关键,即使得序列称为一个按关键字有序的序列{rp1,rp2...rp3},这样的操作称为排序. 1.2排序的稳定性 假设ki=kj(1<=i<

java排序算法(六):直接插入排序

java排序算法(六):直接插入排序 直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中 直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1..n-1)= o(n^2).其他情况下也要考虑移动元素的次数.故时间复杂度是o(n^2) 直接插入空间效率很好,只需要一个缓存数据单元,也就是说空间复杂度是o(1) 直接插入排序是稳定的 直接插入排序在数据以有一定顺序的情况下,效率较好.但如果数据无规则,则需要移动大量的数据.其效率就和冒泡排序和

Java排序算法-Java入门|Java基础课程

Java 排序算法 1. 课程目标 排序是任何语言都会使用到的功能之一,然成果排序的算法有很多,对空间的要求及其时间效率也不尽相同. 本文章以Java语言示例,通过对空间要求.时间效率要求,来对比各种排序算法的使用场景 2.适用对象 Java语言初学者 Java算法爱好者 3.相关概念 3.1 排序概念 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 3.2 排序算法 排序算法,就是如何使得记录按照要求排列的方法. 排序算法在很多领域得到相当地重视,尤其是在

Java排序算法 - 堆排序的代码

把内容过程中比较重要的一些内容片段做个备份,如下的资料是关于Java排序算法 - 堆排序的内容. import java.util.Arrays; public class HeapSort { int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; public HeapSort(){ heapSort(a); } public void heapSort(int[

Java排序方法sort的使用详解

对数组的排序: //对数组排序 public void arraySort(){ int[] arr = {1,4,6,333,8,2}; Arrays.sort(arr);//使用java.util.Arrays对象的sort方法 for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } } 对集合的排序: //对list升序排序 public void listSort1(){ List<Integer> list =

Java排序算法(四):希尔排序

[基本思想] 将原本有大量记录数的记录进行分组,分割成若干个子序列,此时每个子序列待排序的记录个数就比较少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时,再对全体记录进行一次直接插入排序. 所谓的基本有序,就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间,像{2, 1, 3, 6, 4, 7, 5, 8, 9}这样可以称为基本有序了. [java实现] public class ShellSort { public static void main(String