首页 > 其他分享 >快速排序_C语言

快速排序_C语言

时间:2023-04-24 11:24:37浏览次数:39  
标签:arr int C语言 high while base low 排序 快速

思路:

base: 取最低位为base
j: 从右向左找到比base小的数,放到第i位。i++
i: 从左向右找到比base大的数,放到第j位。j--
当i==j时,base放到第i位,此时base左面都是小于base的,base右边都是大于base的

递归:只要最低位小于最高位,执行递归

代码

#include <stdio.h>

//作用:打印数组元素
void display(int array[], int maxlen) {
    for (int i = 0; i < maxlen; i++) {
        printf("%-3d", array[i]);
    }
    printf("\n");
}

//作用:快速排序
void QuickSort(int *arr, int low, int high) {

    //if语句如果low>=high,就不会再次递归
    if (low < high) {
        int i, j, base;
        i = low;
        j = high;
        base = arr[low];

        while (i < j) {
            //从右往左找到大于base的数
            while (i < j && arr[j] >= base) {
                j--;
            }
            if (i < j) {
                arr[i++] = arr[j];
            }
            //从左往右找到小于base的数
            while (i < j && arr[i] <= base) {//?
                i++;
            }
            if (i < j) {
                arr[j--] = arr[i];
            }
        }
        arr[j] = base;

        // 递归调用
        QuickSort(arr, low, j - 1);     // 排序k左边
        QuickSort(arr, j + 1, high);    // 排序k右边
    }
}

// 主函数
int main() {
    int array[] = {17, 34, 25, 17, 16};
    int maxlen = sizeof(array) / sizeof(array[0]);

    printf("before sort\n");
    display(array, maxlen);

    QuickSort(array, 0, maxlen - 1);  // 快速排序

    printf("after sort\n");
    display(array, maxlen);

    return 0;
}

标签:arr,int,C语言,high,while,base,low,排序,快速
From: https://www.cnblogs.com/Kaelthas/p/17348864.html

相关文章

  • 冒泡排序
    一、问题描述对N个整数(数据由键盘输入)进行升序排列二、问题分析:对于N个数因其类型相同,我们可利用数组进行存储。冒泡排序是在两个相邻元素之间进行比较交换的过程将一个无序表变成有序表。冒泡排序的思想:首先,从表头开始往后扫描数组,在扫描过程中逐对比较相邻两个元素的大小。若......
  • 冒泡排序
    #include<iostream>usingnamespacestd;intmain(){ ios::sync_with_stdio(0); cin.tie(0); intn,i,j,t,x,flag=0; cin>>n; int*arr=newint[n]; for(i=0;i<n;i++) cin>>arr[i]; for(i=0;i<n;i++) { for(j=n-1;......
  • 排序算法
    一、总纲常见排序算法:冒泡排序(BubbleSort)、选择排序(SelectionSort)、插入排序(InsertionSort)、快速排序(QuickSort)、归并排序(MergeSort)、堆排序(HeapSort)、希尔排序(ShellSort)、计数排序(CountingSort)、桶排序(BucketSort)、基数排序(RadixSort)下面是这几种排序算法的Java测试......
  • 数据的排序
    1.方法说明: 2.根据指定列进行降序或者升序: 3.根据`数量`和`成交金额`排序: ......
  • 快速识别 SLI 指标的方法:VALET
    SLI,ServiceLevelIndicator,服务等级指标,其实就是我们选择哪些指标来衡量我们的稳定性。而SLO,ServiceLevelObjective,服务等级目标,指的就是我们设定的稳定性目标,比如“几个9”这样的目标。VALET是5个单词的首字母,分别是Volume、Availability、Latency、Error和Ticket。这......
  • C语言--三子棋
    game.h#defineROW3#defineCOL3#include<stdio.h>#include<stdlib.h>#include<time.h>//声明voidDisplayboard(charboard[ROW][COL],introw,intcol);voidInitboard(charboard[ROW][COL],introw,intcol);voidplayer1(charboard[R......
  • 归并排序模板
    voidmerge_sort(intq[],intL,intR){if(L>=R)return;//递归中止条件intmid=(L+R)>>1;merge_sort(q,L,mid);merge_sort(q,mid+1,R);//先递归处理左右intl=L;intr=mid+1;intn=0;while(l<=mid&&......
  • playwright环境配置和快速体验
    继selenium后,又一强大的web自动化框架出现在大众的视野。playwright!在这之前,谈及到UI自动化,大部份人想到的都是selenium。因为selenium2.0和3.0和4.0的发布,并没有过多的功能迭代,不能满足用户的需求。随着新框架的出现,慢慢被替代掉了。一、playwright的优势在哪?1、支持多语言......
  • php按照首字母排序,PHP获取汉字首字母并分组排序
    没问题的直接上代码classCharacter{publicfunctiongroupByInitials(array$data,$targetKey='name'){$data=array_map(function($item)use($targetKey){returnarray_merge($item,['initials'=>$thi......
  • #yyds干货盘点# LeetCode程序员面试金典:在排序数组中查找元素的第一个和最后一个位置
    题目:给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回 [-1,-1]。你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题。 示例1:输入:nums=[5,7,7,8,8,10],target=......