关于快速排序的问题

Freefish1994 Freefish1994 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
为什么同样都是50个数的数组,用加注释的那组数组运行,瞬间就排序好了;用随机数生成的数组排序就特别特别慢?


package com.sort;

import java.util.Random;

public class QuickSort {

public static void main(String[] args) {
// int a[] = new int[] { 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90,
// 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79,
// 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62,
// 61, 60, 59, 58, 57, 56, 55, 54, 53,
// 52, 51, 0, 49, 48, 47, 46, 45, 44 };
//随机数生成数组
int a[] = new int[50];
for (int i = 0; i < a.length; i++) {
int m = new Random().nextInt(100);
a[i] = m;
}
System.out.println("数组长度" + a.length);
start(a);// 快速排序
// 输出排序结果
System.out.print("[ ");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println("]");
System.out.println();
}

private static void start(int a[]) {
if (a.length > 0)
quickSort(a, 0, a.length - 1);
else
System.out.println("Error:输入的数据有误!");
}

private static void quickSort(int a[], int left, int right) {
if (left < right) {
int i = getMiddleValue(a, left, right);
quickSort(a, 0, i - 1);
quickSort(a, i + 1, right);
}

}

private static int getMiddleValue(int a[], int left, int right) {
int i = left, j = right;
int key = a[left];
while (i != j) {
while (i < j && a[j] >= key) {
j--;
}
a[i] = a[j];
while (i < j && a[i] <= key) {
i++;
}
a[j] = a[i];
}
a[i] = key;
return i;
}
}


...全文

相关推荐

快速排序问题

快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的核心思想是分治策略,即将一个大问题分解为小问题来解决,然后将小问题的结果合并,最终得到整个大问题的解。

hyfyhy705705

二分搜索_快速排序_背包问题

maxValue = knapsack(capacity, 5); cout << "最大价值为: " << maxValue << endl; return 0;}```以上三个实验不仅介绍了二分搜索、快速排序以及背包问题的基本原理

映影留心

快速排序邮箱选址问题

邮箱选址问题课程作业 利用快速排序做的 直接可用 读取文件形式输入

SE-Valkyrie

算法实验(快速排序,归并排序,回溯算法,N后问题等。)

快速排序和归并排序都是常用且高效的排序算法,适用于大数据量的排序需求。而回溯算法则常用于解决复杂的组合优化问题,通过试错的方式找到所有或部分可行解。

TC2ah

螺钉螺母匹配问题---快速排序

问题描述:假设我们有n个直径各不相同的螺钉以及n个相应的螺母。我们一次只能比较一对螺钉和螺母,来判断螺母是大于螺钉、小于螺钉还是正好适合螺钉。然而,我们不能拿两个螺母做比较,也不能拿两个螺钉做比较。我们的问题是要找到每一对匹配的螺钉和螺母。为该问题设计一个算法,它的平均效率必须属于集合O(n*logn)。 通常来说,看到平均效率O(n*logn),一般都会想到是快速排序。 如果有不会快速排序的可以看上一篇文章 点击这里跳转。 知道用快速排序,但是应该如何实现呢?本文来讲解一下up主的思路: 把.

i学学学学学习
评论 14
收藏 已收藏
分享
返回顶部
Freefish1994
Java SE 62,620 成员 307,251 内容