首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

快速排序Java代码进入无限循环

快速排序是一种常用的排序算法,它通过将一个数组分成两个子数组,然后对这两个子数组分别进行排序,最终将整个数组排序。快速排序的核心思想是通过选择一个基准元素,将数组中小于基准元素的元素放在基准元素的左边,将大于基准元素的元素放在基准元素的右边,然后递归地对左右两个子数组进行排序。

以下是一个快速排序的Java代码示例:

代码语言:txt
复制
public class QuickSort {
    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int pivot = partition(arr, low, high);
            quickSort(arr, low, pivot - 1);
            quickSort(arr, pivot + 1, high);
        }
    }

    public static int partition(int[] arr, int low, int high) {
        int pivot = arr[high];
        int i = low - 1;
        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                swap(arr, i, j);
            }
        }
        swap(arr, i + 1, high);
        return i + 1;
    }

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

    public static void main(String[] args) {
        int[] arr = {5, 2, 9, 1, 3, 6, 8, 4, 7};
        quickSort(arr, 0, arr.length - 1);
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

这段代码实现了快速排序算法。在quickSort方法中,我们首先选择一个基准元素pivot,然后调用partition方法将数组分成两个子数组,并返回基准元素的索引。接着,我们递归地对左右两个子数组进行排序,直到子数组的长度为1或0。

partition方法中,我们以high作为基准元素的索引,使用i来记录小于基准元素的元素的最右边界。遍历数组,如果当前元素小于基准元素,则将其与i所指向的元素交换,并将i向右移动一位。最后,将基准元素与i+1所指向的元素交换,使得基准元素位于正确的位置。

这段代码的时间复杂度为O(nlogn),其中n为数组的长度。快速排序在大多数情况下具有较好的性能,并且在实际应用中被广泛使用。

腾讯云提供了多种云计算相关产品,例如云服务器、云数据库、云存储等。您可以根据具体需求选择适合的产品。更多关于腾讯云产品的信息,请访问腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

排序算法Java代码实现(五)—— 快速排序

本篇内容: 快速排序 快速排序 算法思想: 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序, 整个排序过程可以递归进行...代码实现:(递归) /** * */ package com.cherish.SortingAlgorithm; /** * @author acer * */ public class...quickSorting(array,0,array.length-1); printArray(array); } /* * 通过一趟排序将要排序的数据分割成独立的两部分..., * 其中一部分的所有数据都比另外一部分的所有数据都要小, * 然后再按此方法对这两部分数据分别进行快速排序, * 整个排序过程可以递归进行,以此达到整个数据变成有序序列...-1); quickSorting(array,middle+1,high); } } //对每个分部数组进行排序

1.8K20
  • Java快排实现(java快速排序代码)

    快速排序: 基本实现思路 取一个标准位置的数字 用其他位置的数字和标准数进行对比 如果比标准数大 则放到标准数的右边,如果比标准数小 则放到标准数的左边 然后使用递归进行持续比对 (注意...:递归要有入口 如果当前数组有数据并且多个才进行排序) ,然后我们用代码实现 package sort; import java.util.Arrays; /** * Created by xiaobai...public static void quickSort(int[] arr, int start, int end) { //当开始位置小于结束位置时(数组有数据) 进行排序...作为比较的标准数 取数组开始位置 从哪里开始 用哪个数当标准数 这个就是标准数 int stard = arr[start]; //记录需要进行排序的下标...int low = start; int high = end; //循环比对比标准数大和小的数字 while

    1.4K20

    快速排序Java实现_快速排序实现java

    高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。...细心的同学可能已经发现,快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。下面上个霸气的图来描述下整个算法的处理过程。 这是为什么呢?...快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。...因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。其实快速排序是基于一种叫做“二分”的思想。我们后面还会遇到“二分”思想,到时候再聊。...先上代码,如下 代码实现: public class QuickSort { public static void quickSort(int[] arr,int low,int high){

    1.4K10

    今日代码大赏 | Java 实现快速排序算法

    的较多,所以今天我们继续上点难度,回忆下用 Java 实现快速排序算法。 是不是看到这里小伙伴们有点熟悉呢。没错,前两天我们分析了 Java 实现冒泡排序算法。...有需要回忆的 Java 实现冒泡排序算法可以点击下方链接,直接跳转哦!...https://mp.weixin.qq.com/s/k5iKu6mdrdUtJFTmbGavhA Java 程序实现快速排序算法示例代码: //用Java快速排序 import java.util.Arrays...如果我们想要按降序对元素进行排序,那么在 Partition() 方法的 for 循环中,我们可以将代码更改为: //小于符号更改为大于 if (array[j] >= pivot) { 今天的代码大赏到此结束...,关于 Java 程序实现快速排序算法,你学会了吗?

    18610

    java实现快速排序图解_快速排序图文详解

    快速排序 快速排序法介绍 图解 代码理解 快速排序算法性能分析 算法图 快速排序法介绍 快速排序(QuickSort)是对冒泡排序的一种改进,基本思想是:通过一趟排序将 要排序的数据分割成独立的两部分...,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。...图解 代码理解 public class QuickSort { //从小到大排序 public void quickSort(int left, int right, int[] nums){...[left]<base)循环到left=1 * nums[right]=nums[left]相当于什么都没做 * 此时left等于right,跳出循环 * 整个过程可以简化为 * base = nums...快速排序的时间性能取决于快速排序递归的深度。

    49420

    java冒泡排序快速排序

    下面我们来看看java中的Arrays.sort(int []a)方法是怎么实现的。 ---- 二、快速排序 java中Arrays.sort使用了两种排序方法,快速排序和优化的合并排序。...快速排序主要是对哪些基本类型数据(int,short,long等)排序, 而合并排序用于对对象类型进行排序。 使用不同类型的排序算法主要是由于快速排序是不稳定的,而合并排序是稳定的。...1.实现原理 java1.7之后的版本,开始用双轴快排取代了以前的排序算法,现在只实现了8种基本数据类型性的双轴快排,对象的排序在1.7中还在用老式的,不过都标了过时,估计以后版本中就会被新的双轴快排取代了...2.实现代码 代码截取自jdk1.7中的Arrays类 /** * Sorts the specified range of the array....尽管插入排序的时间复杂度为0(n^2),但是当数组元素较少时,插入排序优于快速排序,因为这时快速排序的递归操作影响性能。   2)较好的选择了划分元(基准元素)。

    1.3K30

    搞定Java快速排序

    简介 快速排序(Quicksort),简称快排,是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1960年提出。...它的基本思想分治法:即通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以使用递归实现。...二 算法思想 快速排序算法的核心思想是分治法,先比大小,然后分区。下面我们通过生活中的一个例子来解释一下这个算法思想。...29 ,36 四 代码实现 public class Sort { public static void main(String[] args) { int array[]={21,36,26,22,18,29...}; int start = 0; int end = array.length - 1; // 调用sort方法,排序 sort(array, start, end); // 循环输出排序后的结果,看是否正确

    61041

    快速排序java实现)

    高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。...细心的同学可能已经发现,快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。下面上个霸气的图来描述下整个算法的处理过程。 这是为什么呢?...快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。...因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。其实快速排序是基于一种叫做“二分”的思想。我们后面还会遇到“二分”思想,到时候再聊。...先上代码,如下 代码实现: public class QuickSort { public static void quickSort(int[] arr,int low,int high){

    73810

    java冒泡排序代码_Java冒泡排序

    如此下去,重复以上过程,直至最终完成排序。 三、实现思路: 用二重循环实现,外循环变量设为i,内循环变量设为j。...假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,…,1次。...每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,…,n-1,对于每一个i,j的值依次为0,1,2,…n-i 。...四、java代码实现: package 冒泡排序; import java.util.Arrays; /** * 冒泡排序 * @author chen * */ public class BubbleSort...在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序; package 冒泡排序; import java.util.Arrays; /** * 冒泡排序改进版

    1.9K61

    一行代码引入 ViewPager 无限循环 + 页码显示

    特点:   1,代码量少 , 共两个类,约合 310 行代码 (除去注释)   2,可扩展 , 再加个 handler 即可实现自动轮播   3,时间复杂度低   4,耦合度低,只依赖了 imageLoader...,可以自己切换   5,关键点皆给出了详细注释,方便二次开发 功能:   1,右滑无限循环(2^32,或更大),支持页面数>=2, 左滑循环直至原始第一张;   2,上述效果伴随着正确的页面小点显示,具体效果可自定义...MyViewPager(this,viewpager,imageLoder,imageUrls)               .setUnClickLooper(true) // 设置开启第一种效果的无限循环...第二类效果,点击单张图片进入 dialog 风格,大图显示形式 ? ? 类简介:   上述两种效果都能自己选择是否开启无限滑动。   ...LoopViewpagerAdapter 类,继承于 PagerAdapter,主要实现功能是无限循环,逻辑处理比较集中于此,通过接口方式加载页 View。

    2.1K70

    Java常见排序算法详解——快速排序

    概念: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,则可分别对这两部分记录继续进行排序,直到整个序列有序。...图解: 例如我们有个一个数组[29 4 10 11 7] 1.首先我们先选定一个基准元素,这里我们选择10作为基准元素,然后把基准元素放在最后一个,如果选择最后一个元素作为基准元素,那么可以省略 快速排序...↓ 29 4 11 7 10 2.从左到右(除了最后的元素),循环移动小于基准元素到数据开头,留下大于等于基准元素的接在后面。...循环i = 1的时候,找到一个小于基准元素的元素4 这个时候storeIndex = 1 快速排序 ↓ 4 29 11 7 10 之后循环到i...29 10 这个时候storeIndex = 2 3.再然后,我们把基准元素放到storeIndex的位置,其他元素位置依次+1得到了我们想要的数组 4 7 10 11 29 代码

    63030

    快速排序算法详细图解JAVA_实现快速排序

    高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。...细心的同学可能已经发现,快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。下面上个霸气的图来描述下整个算法的处理过程。 这是为什么呢?...快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。...因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。其实快速排序是基于一种叫做“二分”的思想。我们后面还会遇到“二分”思想,到时候再聊。...先上代码,如下 代码实现: public class QuickSort { #arr 需要排序的数组 #low 开始时最左边的索引=0 #high 开始时最右边的索引=arr.length-1

    44620
    领券