美文网首页
排序算法 实现 比较

排序算法 实现 比较

作者: Boger_8cf1 | 来源:发表于2018-12-02 12:40 被阅读0次

public class Main {
public static void main(String[] args) {
int[] arr = new int[1000000];
// new Thread(new Runnable() {
// @Override
// public void run() {
// // 冒泡排序
// for (int i = 0; i < 100000; i++) {
// arr[i] = (int) (Math.random() * 100000);
// }
// long start = System.currentTimeMillis();
// bubbleSort(arr);
// long end = System.currentTimeMillis();
// System.out.println("冒泡排序耗时:" + (end - start) + "ms");
// System.out.println();
// }
// }).start();
// new Thread(new Runnable() {
// @Override
// public void run() {
// //选择排序
// for (int i = 0; i < 100000; i++) {
// arr[i] = (int) (Math.random() * 100000);
// }
// long start = System.currentTimeMillis();
// insertSort(arr);
// long end = System.currentTimeMillis();
// System.out.println("插入排序耗时:" + (end - start) + "ms");
// System.out.println();
// }
// }).start();
// new Thread(new Runnable() {
// @Override
// public void run() {
// for (int i = 0; i < 100000; i++) {
// arr[i] = (int) (Math.random() * 100000);
// }
// long start = System.currentTimeMillis();
// checkSort(arr);
// long end = System.currentTimeMillis();
// System.out.println("选择排序耗时:" + (end - start) + "ms");
// }
// }).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000000; i++) {
arr[i] = (int) (Math.random() * 1000000);
}
long start = System.currentTimeMillis();
mergeIntoSort(arr, 0, arr.length - 1);
long end = System.currentTimeMillis();
System.out.println("归并排序耗时:" + (end - start) + "ms");
System.out.println();
}
}).start();

    new Thread(new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 1000000; i++) {
                arr[i] = (int) (Math.random() * 1000000);
            }
            long start = System.currentTimeMillis();
            quickSort(arr, 0, arr.length - 1);
            long end = System.currentTimeMillis();
            System.out.println("快速排序耗时:" + (end - start) + "ms");
            System.out.println();
        }
    }).start();
}

/**
 * 冒泡排序
 *
 * @param arr
 */
public static void bubbleSort(int[] arr) {
    int length = arr.length;
    for (int i = 0; i < length; i++) {
        boolean isOver = false;
        for (int j = 0; j < length - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr, j, j + 1);
                isOver = true;
            }
        }
        if (!isOver) {
            break;
        }
    }
}

/**
 * 插入排序
 *
 * @param arr
 */
public static void insertSort(int[] arr) {
    for (int i = 1; i < arr.length; ++i) {
        int j = i - 1;
        int value = arr[i];
        for (; j >= 0; --j) {
            if (arr[j] > value) {
                arr[j + 1] = arr[j];
            } else {
                break;
            }
        }
        arr[j + 1] = value;
    }

}

/**
 * 选择排序
 *
 * @param arr
 */
public static void checkSort(int[] arr) {
    int index = -1;
    for (int i = 0; i < arr.length; i++) {
        int min = Integer.MAX_VALUE;
        for (int j = i; j < arr.length; j++) {
            if (arr[j] < min) {
                min = arr[j];
                index = j;
            }
        }
        int temp = arr[i];
        arr[i] = arr[index];
        arr[index] = temp;
        swap(arr, i, index);
    }
}

/**
 * 归并排序
 *
 * @param arr
 */
public static void mergeIntoSort(int[] arr, int start, int end) {
    if (start == end) {
        return;
    }
    int mid = start + (end - start) / 2;
    mergeIntoSort(arr, start, mid);
    mergeIntoSort(arr, mid + 1, end);
    merge(arr, start, mid, end);
}

private static void merge(int[] arr, int start, int mid, int end) {
    int[] help = new int[end - start + 1];
    int index = 0;
    int startIndex = start;
    int midIndex = mid + 1;
    while (startIndex <= mid && midIndex <= end) {
        help[index++] = arr[startIndex] < arr[midIndex] ? arr[startIndex++] : arr[midIndex++];
    }
    while (startIndex <= mid) {
        help[index++] = arr[startIndex++];
    }
    while (midIndex <= end) {
        help[index++] = arr[midIndex++];
    }
    for (int i = 0; i < index; i++) {
        arr[start + i] = help[i];
    }
}


/**
 * 快速排序
 *
 * @param arr
 */
public static void quickSort(int[] arr, int start, int end) {
    if (start < end) {
        swap(arr, start + (int) (Math.random() * (end - start + 1)), end);
        int[] p = partition(arr, start, end);
        quickSort(arr, start, p[0] - 1);
        quickSort(arr, p[1] + 1, end);
    }
}

private static int[] partition(int[] arr, int start, int end) {
    int less = start - 1;
    int more = end;
    while (start < more) {
        if (arr[start] < arr[end]) {
            swap(arr, ++less, start++);
        } else if (arr[start] > arr[end]) {
            swap(arr, --more, start);
        } else {
            start++;
        }
    }
    swap(arr, more, end);
    return new int[]{less + 1, more};
}

public static void swap(int[] arr, int i, int j) {
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}

}

10W条数据下,五种排序算法 执行时间


image.png

相关文章

  • 排序算法

    常见排序算法比较 参考资料:各种排序算法比较 参考资料:快速排序算法 必须知道的八大种排序算法【java实现】(一...

  • 【非比较类排序算法】计数排序、桶排序(PHP实现)

    常见的经典非比较类排序算法有计数排序、桶排序。区别于比较类排序,非比较类排序利用额外的内存空间实现更快排序,算法以...

  • python实现计数排序(CountSort)

    python实现【计数排序】(CountSort) 算法原理及介绍 计数排序不是基于比较的排序算法,其核心在于将输...

  • 排序算法 实现 比较

    public class Main {public static void main(String[] args)...

  • 排序与搜索

    排序算法: 一种能将一串数据依照特定顺序进行排列的一种算法 常见排序算法效率的比较 排序算法的实现 1. 冒泡排序...

  • 常见排序算法总结 -- java实现

    常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次...

  • 基础算法|快速排序

    快速排序(Quicksort),是对冒泡排序算法的一种改进。 快速排序算法通过多次比较和交换来实现排序,其排序流程...

  • 用JavaScript实现常见的排序算法

    前戏 复习了一些比较常见的排序算法,用JS实现,带一些实现思路。 无图,无脑贴代码。。 比较排序 冒泡排序 比较相...

  • 排序算法 --- 计数排序

    前面说的那些排序算法,都是要通过比较来实现的。排序还能不通过比较来实现?是的,计数排序就是这么神奇。 一、排序思想...

  • JavaScript的排序算法——冒泡排序

    冒泡排序(Bubble Sort) 冒泡排序,有时也被称做沉降排序,是一种比较简单的排序算法。这种算法的实现是通过...

网友评论

      本文标题:排序算法 实现 比较

      本文链接:https://www.haomeiwen.com/subject/opdjcqtx.html