首页 > 其他分享 >快速排序

快速排序

时间:2023-08-29 10:23:30浏览次数:36  
标签:arr int 元素 high low 排序 快速

快速排序是一种常见的排序算法,它的基本思想是通过分治的策略将一个大问题拆分为若干个小问题,并通过递归求解这些小问题,最终将整个问题排序完成。

具体的步骤如下:

  • 选择一个基准元素,一般选择第一个元素。
  • 将序列中小于等于基准元素的元素移动到基准元素的左边,大于基准元素的元素移动到右边。这个过程称为分区操作。
  • 对基准元素左边和右边的子序列分别进行递归排序。
public static void quickSort(int[] arr, int low, int high) {
    if (low < high) {
        // 分区操作,将数组分为两部分
        int pivotPos = partition(arr, low, high);
        // 递归排序前半部分
        quickSort(arr, low, pivotPos - 1);
        // 递归排序后半部分
        quickSort(arr, pivotPos + 1, high);
    }
}

private static int partition(int[] arr, int low, int high) {
    //设置基准值
    int pivot = arr[low];
    while (low < high) {
        //从右向左找到第一个小于基准值的数
        while (low < high && pivot <= arr[high]) {
            high--;
        }
        arr[low] = arr[high];
        //从左向右找到第一个大于基准值的数
        while (low < high && pivot > arr[low]) {
            low++;
        }
        arr[high] = arr[low];
    }
    arr[low] = pivot;
    return low;
}

示例:演示 5 1 6 9 8 3 4 的第一次分区操作

快速排序的时间复杂度为平均情况下的O(n log n),最坏情况下为 O(n^2),空间复杂度为 O(log n)。它是一种原地排序算法,具有较快的速度和较好的性能。

标签:arr,int,元素,high,low,排序,快速
From: https://www.cnblogs.com/czarQ/p/17664085.html

相关文章

  • 希尔排序整理
    算法原理代码实现1publicstaticvoidsort(int[]array){2//数据间隔h8>4>2>13inth=array.length/2;4while(h>=1){5for(intstart=0;start<h;start++){6//对start,start+h,......
  • draw.io快速入门(上)
    1编辑图标Draw.io(现名diagrams.net)是免费的在线图形绘制工具,可用于创建各种类型的图表、流程图、组织结构图、UML图、网络拓扑图等。以下是Draw.io的一些特点和功能:免费和开源Draw.io是一个免费的工具,用户可以免费访问和使用其所有功能。并且它是开源软件,用户可以查看和......
  • 数组二分查找:35. 搜索插入位置、34. 在排序数组中查找元素的第一个和最后一个位置
    35. 搜索插入位置1classSolution:2defsearchInsert(self,nums:List[int],target:int)->int:3left,right=0,len(nums)-145whileleft<=right:#左闭右闭6mid=left+(right-left)//27ifnum......
  • 【C++STL基础入门】vector运算和遍历、排序、乱序算法
    @TOC前言C++标准库提供了丰富的容器和算法,其中vector是最常用的容器之一。它以动态数组的形式存储元素,并提供了许多方便的运算符和算法来操作和处理数据。本文将介绍vector的基本运算、遍历方法、排序算法以及乱序算法。通过学习这些内容,您将能够更加灵活、高效地使用vector容器。......
  • 冒泡排序
    冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的元素,并根据需要交换它们的位置,直到整个列表排序完成为止。具体步骤如下:从列表的第一个元素开始,比较它与下一个元素的大小。如果当前元素较大,则交换它与下一个元素的位置。继续向列表的下一个元素进行比较,重复......
  • 插入排序之希尔排序
    1voidshell_sort()2{3unsignedchari=0,j=0,gap;4unsignedchararr[10]={4,1,3,9,6,2,8,5,0,7};5unsignedcharlen=sizeof(arr);6unsignedchartemp;7chark;8gap=len;9while(gap)10{11gap......
  • 插入排序之直接插入排序
    1voidinsert_sort()2{3inti,j;4unsignedchararray[10]={4,1,3,9,6,2,8,5,0,7};5unsignedcharlen=sizeof(array);67/*遍历所有无序序列*/8for(i=1;i<len;i++)9{10unsignedchartemp=array[i];......
  • 简单排序之选择排序
    1voidselect_sort()2{3inti,j,k;4unsignedchararray[10]={4,1,3,9,6,2,8,5,0,7};5unsignedcharlen=sizeof(array);6unsignedchartemp;78for(i=0;i<len-1;i++)9{10k=i;11/*遍历所以有......
  • 递归排序之快速排序(挖坑法)
    1#include<stdio.h>234unsignedcharstandard(unsignedchar*array,unsignedcharlow,unsignedcharhigh)5{6unsignedcharkey=array[low];7while(low<high)8{9while(low<high&&array[high]&g......
  • Java快速入门
    网上有很多的相关资料,这里也就不做过多概念的论述了本人电脑:目前使用win11,内存64,处理器12900hJava简介Java由詹姆斯高斯林开发,原本归属于SUN公司(斯坦福网络),后来SUN公司被Oracle(甲骨文)收购,目前版本归属于Oracle,现在的java版本已经很多了,目前市面上使用......