java中的排序除了冒泡以来, 再给出一种方法, 举例说明

9.5 排序:   有一种排序的方法,非常好理解,详见本题的步骤,先找出最大值和最小值,把最小值打印出来后,把它存在另一个数组b当中,再删除此最小值,之后再来一次找出最小值,打印出最小值以后,再把它存在另一个数组b当中,再删除此最小值,这样循环往复,直到做完,你就会发觉,你已经把排了序数放在b数组当中了,而这里的彻底删除最小值的方法就是用比最大值还大一的数来取代最小值。(自己想想为什么?)参考后面的答案你会发觉,按照下面的四步,你已经把一个数组排序了。 i)make a method called getMin to find the minimal value of the array. ii)make a method called getMax to find the maximum value of the array. iii) replace the minimal value with the maximum+1. iiii) sort an array.

public class Test {
    static int minPosition=0;//用这个全局变量来记录最小数的位置索引,
    public static void main(String[] args) {
        int[] a = {6, 12, 7, 23, 4};
        int max = getMax(a);
        int[] b = new int[a.length];
        for (int j = 0; j < a.length; j++) {
            int min = getMin(a); 
 /*把a数组当中最小的值,马克-to-win给替换成max+1,这样就相当于把原来的最小值从这个数组当中彻底清除掉了。整个循环做完,a数组就彻底废了。*/
            a[minPosition] = max + 1; 
            minPosition=0;//把minPosition重置一下, 因为最小的位置已经不是这了。
            b[j] = min;//用此方法a数组当中的数就一个一个从小到大捣到b数组当中了
        }
        for (int j = 0; j < a.length; j++) System.out.println(b[j]);
    }
    static int getMax(int[] a) { 
       int max=a[0];
       for (int i = 1; i < a.length ; i++) {
           if(max<a[i])
           {
               max=a[i];
           }
       }        
       return max;
    }
    static int getMin(int[] a) { 
        int min=a[0];
        for (int i = 1; i < a.length ; i++) {
            if(min>a[i])
            {
                min=a[i];
                minPosition=i;//用这个全局变量来记录最小数的位置索引,
            }
        }        
        return min;
    }

}

更多请见:
https://blog.youkuaiyun.com/qq_44639795/article/details/103142934

 

 

<think>好的,用户想了解Java冒泡排序。首先,我需要确定用户的需求是什么。可能他们刚开始学习编程,想了解Java的基本概念以及冒泡排序的实现。或者他们可能在准备面试,需要复习基础知识。 首先,介绍Java。要简明扼要,涵盖它的特点,比如面向对象、平台无关性、应用场景等。用户可能对Java的历史不感兴趣,但核心特点很重要。比如JVM的作用,跨平台原理,这样能帮助用户理解为什么Java这么流行。 然后是冒泡排序。需要解释算法原理,最好分步骤说明,比如比较相邻元素、交换位置、重复多轮直到排序完成。要强调它的时间复杂度,O(n²),适用于小数据集,但不适合大规模数据。可能用户想知道为什么冒泡排序效率低,这时候需要提到多次比较和交换操作。 接下来,结合Java实现冒泡排序。这里要注意代码的清晰度,最好分步骤解释。比如外层循环控制轮数,内层循环进行相邻比较和交换。需要确保代码正确,语法正确,比如数组的定义、循环变量的范围。可能用户会好奇优化点,比如加入标志位检查是否已经有序,提前结束循环,这样可以稍微优化性能。 同时,用户可能想知道冒泡排序的实际应用场景,虽然效率不高,但在教学或者小数据情况下还是有用的。这时候可以举例说明,比如学校教学、简单任务或者作为其他排序算法的对比。 还要检查是否需要对比其他排序算法,但用户没有提到,可能暂时不需要展开。不过可以稍微提一下,比如快速排序或归并排序更高效,但冒泡排序容易理解和实现。 最后,确保回答结构清晰,分点讲解,先Java冒泡排序,再代码实现。注意使用中文,避免术语翻译不当,比如“面向对象”这样的术语保持原样。代码部分要正确,使用正确的语法,比如for循环、数组操作,并加上注释说明每一步的作用。 总结下来,回答应该分为三个部分:Java简介,冒泡排序原理,Java实现示。每个部分下再细分要点,用简单易懂的语言解释,确保用户能够逐步理解。同时,注意用户可能的疑问点,如时间复杂度、优化方法,提前在解释中涵盖这些内容。</think>### Java简介 **Java** 是一种广泛使用的高级编程语言,具有以下核心特点: 1. **面向对象**:基于类和对象,支持封装、继承、多态。 2. **平台无关性**:通过**JVM(Java虚拟机)**实现“一次编写,到处运行”。 3. **健壮性**:提供内存管理(垃圾回收)、异常处理等机制。 4. **应用场景**:Web开发(Spring框架)、移动应用(Android)、大数据(Hadoop)等。 --- ### 冒泡排序原理 **冒泡排序**是一种基础的排序算法,核心思想是通过相邻元素的**多次比较和交换**,将最大(或最小)元素逐步“冒泡”到序列末端。 **步骤**: 1. 从第一个元素开始,依次比较相邻元素,若顺序错误则交换。 2. 每轮遍历将未排序部分的最大值移动到末尾。 3. 重复上述步骤,直到所有元素有序。 **时间复杂度**: - 最优情况(已有序):$O(n)$ - 平均和最差情况:$O(n^2)$ **适用场景**:小规模数据或教学演示。 --- ### Java实现冒泡排序 ```java public class BubbleSort { public static void bubbleSort(int[] arr) { int n = arr.length; boolean swapped; // 优化:标记是否发生交换 for (int i = 0; i < n - 1; i++) { swapped = false; // 每轮将最大值冒泡到末尾 for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 交换相邻元素 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; swapped = true; } } // 若无交换,提前结束排序 if (!swapped) break; } } public static void main(String[] args) { int[] arr = {64, 34, 25, 12, 22, 11, 90}; bubbleSort(arr); System.out.println("排序结果: " + Arrays.toString(arr)); } } ``` **代码解析**: 1. **外层循环**:控制排序轮数(最多需 $n-1$ 轮)。 2. **内层循环**:遍历未排序部分,通过比较和交换确定最大值。 3. **优化**:通过 `swapped` 标志减少不必要的遍历。 --- ### 总结 - **Java** 是跨平台、面向对象的通用编程语言。 - **冒泡排序**简单但效率较低,适合小规模数据。 - 实际开发中,大规模数据更推荐快速排序($O(n \log n)$)等高效算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mark_to_win

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值