首页 > 编程语言 >经典算法题之排序C

经典算法题之排序C

时间:2024-01-07 10:11:38浏览次数:27  
标签:head return int tail while 算法 经典 排序

写个快排就完事了。实在不行,写个选择排序也很简单。

#include<stdio.h>
int devide(int A[],int head,int tail){
    if(head==tail) return head;
    int t = A[head] ;
    while(head < tail){
        while(tail > head && A[tail] > t)   tail--;
        if(head!=tail)  A[head++]=A[tail];
        while(head < tail && A[head] < t)   head++;
        if(head!=tail)  A[tail--]=A[head];
    }
    A[head]=t;
    return head;
}
void quicksort(int A[],int head,int tail){
    if(head >= tail) return;
    int t=devide(A,head,tail);
    if(t>head)  quicksort(A,head,t-1);
    if(t<tail)  quicksort(A,t+1,tail);
}
int main(){
    int A[101]={0};
    int n = 0 ;
    while(scanf("%d",&n) != EOF ){
        for(int i = 0 ; i < n ; i++ ){
            scanf("%d",&A[i]);
        }
        quicksort(A,0,n-1);
        for(int i = 0 ; i < n ; i++ ){
            printf("%d ",A[i]);
        }
        printf("\n");
    }
    return 0;
}

标签:head,return,int,tail,while,算法,经典,排序
From: https://www.cnblogs.com/llllmz/p/17950187

相关文章

  • 【教3妹学编程-算法题】队列中可以看到的人数
    3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”2哥 :3妹,什么事呀这么开森。3妹:2哥你看今天的天气多好啊,最近一周都是大晴天,艳阳高照2哥:是啊,天气不冷不热的,很适合生活3妹:据说南方的小土豆都跑到北方滑雪了,哈哈哈哈2哥:泼水成冰好玩是好玩,但是一定要注意防寒哦,看新闻都......
  • 算法与数据结构(开篇)
    基本概念:算法(Algorithm):⼀个计算过程,解决问题的⽅法NiklausWirth:“程序=数据结构+算法”时间复杂度时间复杂度:⽤来评估算法运⾏效率的⼀个式⼦经验当算法过程出现循环折半的时候,复杂度式⼦中会出现logn.时间复杂度是⽤来估计算法运⾏时间的⼀个式⼦(单位)常⻅的时间复杂度(按效率排......
  • 排序算法之堆排序
    一:概述堆排序是在二叉堆的基础上实现的,如果想要学习堆排序,就得掌握二叉堆。二叉堆的特性是:最大堆的堆顶是整个堆中最大的元素。最小堆的堆顶是整个堆中最小的元素。二:具体说明<1>以最大堆为例讲述如果要删除一个最大堆的堆顶(并不是完全删除,而是跟末尾的节点交换位置),经过自我......
  • 快速排序
    快速排序双指针分治voidquick_sort(intq[],intl,intr){//递归的终止情况if(l>=r)return;//第一步:分成子问题inti=l-1,j=r+1,x=q[l+r>>1];while(i<j){doi++;while(q[i]<x);doj--;while(q[......
  • 算法的时间复杂度和空间复杂度
    1.算法效率1.1如何衡量一个算法的好坏longlongFib(intN){if(N<3){return1;}returnFib(N-1)+Fib(N-2);}斐波那契数列的递归实现方式非常简洁,但是简洁一定好吗?那应该如何衡量其好与坏呢?1.2算法的复杂度衡量一个算法的好坏,一般是从时间和空间上来衡量的,即时间......
  • 经典算法问题之打印日期
    这也是一道经典的算法题。其实也是用两个数组。还有判断是否闰年。两个个循环,外面一个是月份循环,内部一个是每个月的天数循环,然后计数器Count++就行,直到和天数相同就跳出循环,打印就行。#include<stdio.h>intjudge(intyear){if(year%400==0||year%100!=......
  • 机器学习-决策树系列-Adaboost算法-集成学习-29
    目录1.adaboost算法的基本思想2.具体实现1.adaboost算法的基本思想集成学习是将多个弱模型集成在一起变成一个强模型提高模型的准确率,一般有如下两种:bagging:不同的basemodel可以并行计算,输出预测结果少数服从多数,回归问题则对多个模型输出的结果求平均。boosting:后一......
  • 代码随想录算法训练营第二十四天 | 回溯算法理论基础,77. 组合
    一、回溯算法理论基础学习:1.基本概念回溯法是一种搜索方式回溯的本质是穷举,是递归的副产品,即回溯算法就是递归算法回溯解决的问题都能理解成树形结构,一般是在集合中递归查找子集。集合的大小构成树的宽度(n叉树),递归的深度构成了树的深度2.回溯解决的问题(1)组合问题:N个......
  • 经典算法之天数问题
    这题算是非常经典的题目了。无非就是判断闰年然后计算天数而已。用两个month数组记录月份天数一三五七八十腊是31天,二月份非闰年28天,闰年29天,其余都是30天就好了。#include<stdio.h>intjudge(intyear){if(year%400==0||year%100!=0&&year%4==0......
  • C语言逆波兰式算法
    1#include<stdio.h>23//数字模式识别4#defineIS_NUM(c)(((c)>='0')&&((c)<='9')||((c)=='.'))5//符号字符识别6#defineIS_OPERATOR(c)(((c)=='+')||((c)=='-')||((c)==&......