java小白学习记录:插入排序和快速排序

一、插入排序
插入排序原理如下:
java小白学习记录:插入排序和快速排序_第1张图片

public static void main(String[] args) {
    Random rand = new Random();//调用随机数工具
    int[] array = new int[10];  //定义一个长度为10,数据类型为int型的数组
   array[0] = 1+rand.nextInt(100);  //将数组的第一个数赋值为1-100之间的一个随机数

    //使用for循环依次为数组的各个位置赋值
   for (int i = 1; i <array.length ;i++ ) {
        array[i] = 1+rand.nextInt(100);

        //使用for循环确保新生成的值,不重复
        for (int j = 0; j <i ; j++) {
            //循环遍历,依次比较是否有值与本次所赋的值相等,如果存在相等的值,重新给这个位置赋值
            if (array[i]==array[j]){
                i--;
                break;
            }
        }
    }

   //使用增强型for循环输出原数组的排序方式
    System.out.print("排序前:");
    for (int i : array) {
        System.out.print(i+"\t");
    }
    System.out.println();
    //插入排序
    for (int i = 1,t,j; i <array.length ; i++) {
        //先拿i和i-1位置上的值作比较,如果1位置上的值大,则自然成序,进入下一轮
        if (array[i]>=array[i-1]){
            continue;
        }
        //用临时变量存储i位置的值
        t = array[i];
        //依次将t与前面的数值比较,并且如果t比较小,则进行值交换
        for (j = i-1; j>=0 && t<array[j]; j--) {
            array[j+1] = array[j];
        }
        //将j+1的位置的值变为t
        array[j+1] = t;
    }
    //输出排序过后的数组
    System.out.print("排序后:");
    for (int i : array) {
        System.out.print(i+"\t");
    }
    System.out.println();


}

结果如下:
java小白学习记录:插入排序和快速排序_第2张图片

二、快速排序
快速排序原理如下:
  快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

public static int index(int[] array, int begin, int end) {
    int i = begin, j = end, t = array[begin], t1;
    while (i<j) {
        //从右往左找比t小的数
        while (t<=array[j]&&i<j) {
            j--;
        }
        //从左往右找比t大的数
        while (t>=array[i]&&i<j) {
            i++;
        }
        //执行值交换
        if (i<j) {
            t1 = array[j];
            array[j] = array[i];
            array[i] = t1;
        }
    }
    //将基准值放在应该在的位置
    array[begin] = array[i];
    array[i] = t;
    return i;
}

public static void quickStor(int[] array, int begin, int end) {
    if (begin<end) {
        int i = index(array, begin, end);
        //排序左半部分
        quickStor(array, begin, i - 1);
        //排序右半部分
        quickStor(array, i + 1, end);
    }
}


public static void main(String[] args) {
    Random rand = new Random();//调用随机数工具
    int[] array = new int[10];  //定义一个长度为10,数据类型为int型的数组
    array[0] = 1 + rand.nextInt(100);  //将数组的第一个数赋值为1-100之间的一个随机数

    //使用for循环依次为数组的各个位置赋值
    for (int i = 1; i < array.length; i++) {
        array[i] = 1 + rand.nextInt(100);

        //使用for循环确保新生成的值,不重复
        for (int j = 0; j < i; j++) {
            //循环遍历,依次比较是否有值与本次所赋的值相等,如果存在相等的值,重新给这个位置赋值
            if (array[i] == array[j]) {
                i--;
                break;
            }
        }
    }

    //使用增强型for循环输出原数组的排序方式
    System.out.print("排序前:");
    for (int k : array) {
        System.out.print(k + "\t");
    }
    System.out.println();
    quickStor(array, 0, array.length - 1);  
    System.out.println();
    System.out.print("转换后:");
    for (int k : array) {
        System.out.print(k + "\t");
    }
    System.out.println();

结果如下:

java小白学习记录:插入排序和快速排序_第3张图片

你可能感兴趣的:(java)