基于c语言实现的快速排序算法

题目描述:对输入的n个数进行排序并输出。

解题思路:其实是很常规的排序题,但是为了一复习,所以采用快排的方法。这里就当是快速排序的代码实现练习好了。

快速排序是非常经典的一个算法,可以在对数规模的时间下实现对一组数的排序。

其基于分治的思想,每一趟排序把原组数划分为更小的范围进行排序,并且一定有一个数会在每趟排序下放在最终的位置。

用通俗的语言描述这个过程,就是从这一个分组的两头开始向中间遍历,一边遍历一边把大的放到右边,小的放到左边。

最后当low=high时停留在pivot的位置,再将一开始枢纽pivot的元素塞回去。

枢纽元素pivot最后所在的位置为其最终位置,最后以枢纽元素为中心把大分组的元素划分为两部分

递归调用快排函数,对于更小的部分继续排序、划分、再对更小的分组进行快排,再划分……

注:pivot的选取是任意的,这里为了方便每次选取最左元素作为枢纽。实际上每次如果选取的枢纽在一趟排序后恰能把这一组数据从中间划分为两部分最佳。

(一趟排序后pivot左边的元素不一定有序,但比pivot元素小(<=);pivot右边的元素也同理,不一定有序,但比pivot元素大。(>=))

对于快排算法我一开始学习也是比较大头,时间久了就很熟悉了。想起大三上算法课的时候居然还和老师说快排是基于二分的思想。。。真是丢死人了

上学期复习排序的时候特意画了一张模拟的小漫画,现在不在身边。等下学期回学校再拍一下传上来放这里。

#include<stdio.h>
void quick_sort(int *a,int l,int h)
{
    if(l<h)//如果分组里还有两个以上的元素,继续排序
    {
        int pivot=a[l];
        int low=l;
        int high=h;
        while(low<high)
        {
            while(low<high&&a[high]>=pivot)
            {
                high--;
            }
            a[low]=a[high];
            while(low<high&&a[low]<=pivot)
            {
                low++;
            }
            a[high]=a[low];
        }
        a[low]=pivot;
        quick_sort(a,l,low-1);
        quick_sort(a,low+1,h);
    }
    else return ;
}
int main()
{
    int a[10001];
    int n,i;
    while(scanf("%d",&n)!=EOF)
    {
        int len=n;
        i=0;
        while(n--)
        {
              scanf("%d",&a[i]);
              i++;
        }
        quick_sort(a,0,len-1);
        for(i=0;i<len;i++)
        {
            printf("%d ",a[i]);
        }

    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/AKsnoopy/p/8311619.html

时间: 2024-10-29 00:11:04

基于c语言实现的快速排序算法的相关文章

基于R语言的梯度推进算法介绍

通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法.通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Boosting算法,这是因为和其他方法相比,它在产生类似的结果时往往更加节约时间. Boosting算法有很多种,比如梯度推进(Gradient Boosting).XGBoost.AdaBoost.Gentle Boost等等.每一种算法都有自己不同的理论基础,通过对它们进行运用,算法之间细微的差别

基于BP神经网络的简单字符识别算法自小结(C语言版)

本文均属自己阅读源码的点滴总结,转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:[email protected] 写在前面的闲话: 自我感觉自己应该不是一个很擅长学习算法的人,过去的一个月时间里因为需要去接触了BP神经网络.在此之前一直都认为算法界的神经网络.蚁群算法.鲁棒控制什么的都是特别高大上的东西,自己也就听听好了,未曾去触碰与了解过.这次和BP神经网络的邂逅,让我初步掌握到,理解透彻算法的基本原理与公式,转为计算机所能识别的代码流,这应该就是所谓的数学和计

C语言快速排序算法代码分析

最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要.有的时候代码的可维护.可重用.可扩展确实胜过单纯的算法效率高.所以拾起大牛书籍<大话设计模式>同时参考网上诸大牛的博客,开始我的设计模式之旅.由于平时编程时用C/C++,现在是Java,也练练Java语法. 今天先介绍一下命令模式. 概念: 命令模式(Command):将一个请求封装成一个对象,从而使你可用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作.

快速排序算法-C语言实现

注:本篇内容为翻译,之所以选择这篇进行翻译原因是该文章含有动画,能够更加直观地展示快速排序.同时,可以仔细看一下代码,代码中把结构化的思想给予了更加充分地表现.按照功能进行模块划分的思想得到了彻底地贯彻. 以下内容翻译自: http://cprogramminglanguage.net/quicksort-algorithm-c-source-code.aspx 译文: 在快速排序算法中,使用了分治策略.首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束. 步骤如下: 在序列

实现基于C语言的二值图像连通域标记算法

实现基于C语言的二值图像连通域标记算法 1 #include <stdio.h> 2 #include <stdarg.h> 3 #include <stddef.h> 4 #include <stdlib.h> 5 #include <stdint.h> 6 #include <math.h> 7 8 #define CONNECTIVITY4 4 9 #define CONNECTIVITY8 8 10 #define STACK

逻辑回归算法实现_基于R语言

逻辑回归(Logistic Regression)模型和线性回归非常相似,可以说就是在逻辑回归的基础上加上了一步逻辑转换,也就是因为这个转换,使逻辑回归模型非常适用于二分类问题的概率预测.本文主要详述逻辑回归模型的基础以及逻辑回归模型的R语言实现. 一.逻辑回归模型原理 首先要讲一下线性回归在预测分类事件中的缺点:线性回归模型的泛化能力很差,如果训练集存在噪点,会导致模型的结果特别差,不同样本建立起来的模型分割点不同:下图中根据年龄预测是否成年的分类问题,斜线就是根据训练集拟合出来的线性回归模型

C语言 - 快速排序算法

1. 快速排序算法 1 #include<stdio.h> 2 3 struct node 4 { 5 int key; 6 }; 7 typedef struct node DataType; 8 9 int Qukpass_sort(DataType Ar[],int s,int t); 10 int Quk_Sort(DataType Ar[],int s,int t); 11 12 int main(void) 13 { 14 15 int n,i; 16 DataType array

C语言实现数组快速排序(含对算法的详细解释)

/* 说明: 代码参考过网上代码,但分析为个人原创,本贴重在说明快速排序算法的思想和运行过程. */ 代码部分: #include<stdio.h> #include<stdlib.h> void quickSort(int* arr,int startPos, int endPos) { int i, j; int key; key = arr[startPos]; i = startPos; j = endPos; while (i<j) { while (arr[j]

中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下: 后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,也是个知识发现的过程,以后有机会再学习下. ================================================== * 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallse