首页 > 其他分享 >快排.c

快排.c

时间:2022-08-19 01:14:33浏览次数:62  
标签:tmp int 快排 MaxSize Swap key

#include<stdio.h>
#define MaxSize 5

int Swap(int *i, int *j){
    int tmp;
    tmp=*j;
    *j=*i;
    *i=tmp;
}

void Qsort(int A[], int L,int R) {      	//a数组保存数据,L和R是边界
    if (L >= R) 
        return;             	//当前区间元素个数<=1则退出
    int key, i = L, j = R;            	//i和j是左右两个数组下标移动
    //把a数组中随机一个元素和A[L]交换  	//快排优化,使得基准值的选取随机
        key = A[L];                    	//key作为枢值参与比较
    while (i < j) {
        while (i<j && A[j]>key)
            j--;
        while (i < j && A[i] <= key)
            i++;
        if (i < j)
            Swap(&A[i], &A[j]);      //交换A[i]和A[j]
    }
    Swap(&A[L], &A[i]);
    Qsort(A, L, i-1);         		//递归处理左区间
    Qsort(A, i+1, R);          	//递归处理右区间
}

void output(int A[],int maxsize){
    int j=maxsize;
    for(int i=0;i<j;i++){
        printf("%d ", A[i]);
    }
}

int main() {
    int a[MaxSize] = { 7, 2, 3, 4, -1 };
    printf("原始序列为:");
    output(a,MaxSize);
    printf("\n快速排序后:");
    Qsort(a,0,MaxSize-1);
    output(a,MaxSize);
}

标签:tmp,int,快排,MaxSize,Swap,key
From: https://www.cnblogs.com/Devoir/p/16600643.html

相关文章

  • 快排
    快排例1给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组右边,要求额外空间复杂度O(1),时间复杂度O(N)解法:0、我们指定一块区域,称之为......
  • 经典算法之快排
    快排的复杂度快排逻辑快速排序算法通过多次比较和交换来实现排序,其排序流程如下:首先设定一个分界值(基准值),通过该分界值将数组分成左右两部分。将大于或等于分界值......
  • LeetCode912 排序数组(手撕快排)
    LeetCode912排序数组classSolution:defsortArray(self,nums:List[int])->List[int]:importrandomdefpartition(l:int,r:int......