求用C语言利用快速排序法完成数组排序,完成如下例子,谢谢谢谢:

排序前:
1 1 1
1 1 3
2 1 3
1 2 1
2 1 2
1 2 2
2 2 2
1 2 3
2 2 1
1 1 2
1 2 4
1 3 1
2 1 1
2 2 3

排序号:
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 2 4
1 3 1
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3

0

2个回答

C语言标准库的qsort函数,就是快速排序。

#include "stdlib.h"
#include "stdio.h"

int data[14][3] = {
    { 1, 1, 1 },
    { 1, 1, 3 },
    { 2, 1, 3 },
    { 1, 2, 1 },
    { 2, 1, 2 },
    { 1, 2, 2 },
    { 2, 2, 2 },
    { 1, 2, 3 },
    { 2, 2, 1 },
    { 1, 1, 2 },
    { 1, 2, 4 },
    { 1, 3, 1 },
    { 2, 1, 1 },
    { 2, 2, 3 }
};

int order[14];

int cmp(const void *a, const void *b)
{
    int * x = data[(*(int *)a)];
    int * y = data[(*(int *)b)];
    if (x[0] == y[0])
    {
        if (x[1] == y[1])
            return x[2] - y[2];
        else
            return x[1] - y[1];
    }
    return x[0] - y[0];
}

int main()
{
    printf("排序前\n");
    for (int i = 0; i < 14; i++)
    {
        order[i] = i;
        printf("%d %d %d\n", data[order[i]][0], data[order[i]][1], data[order[i]][2]);
    }
    qsort(order, 14, sizeof(int), cmp);
    printf("排序后\n");
    for (int i = 0; i < 14; i++)
    {
        printf("%d %d %d\n", data[order[i]][0], data[order[i]][1], data[order[i]][2]);
    }
    return 0;
}


图片说明

如果问题得到解决,请点我回答左上角的采纳和向上的箭头,谢谢

2

因为之前的冒泡法效率太慢了,我处理的数据很多,所以需要快速排序法完成,谢谢各位朋友的帮助,谢谢谢谢了

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
使用快速排序法对一维数组进行排序
使用快速排序法对一维数组进行排序,程序完全可以运行,方便大家学习
C语言利用快速排序(QuickSort)实现对数组的排序
 快速排序是一种交换排序,是对冒泡排序的改进nn利用冒泡排序的特性,对目标进行分段冒泡nnn#include &quot;stdio.h&quot;nint a[6];//定义一个数组,长度为6,实际存放5个元素,nn/**n * 快速排序函数n * @param left 最左边的指针n * @param right 最右边的指针n */nvoid QuickSort(int left,int right){n ...
多线程排序+快速排序
多线程排序,主要是将整个排序的序列分成若干份,每一个线程排序一份,所以线程排序完成之后,就进行归并,相当于多个有序序列合并成一个有序序列。rnrnrn这里就需要用到线程屏障,也就是 pthread_barrier 系列函数。rn屏障,通俗的说就是一个比赛跑步的过程,所以队员就绪了,才能进行比赛。rn多线程排序也是,需要每个线程都是排序完成后,才能进行合并的过程。rnrnrn代码:rn#includ
快速排序经典算法(分治法,挖坑法,前后指针法,非递归)
快速排序最优的情况就是当关键值位于序列中间时 n快速排序最坏的情况就是对已序的序列进行排序 n时间复杂度:O(N^2)最差 n使用场景:数据量大而杂乱的序列,避免出现最坏的情况 n快速排序递归算法之分治法 n基本思路: n1.先从数列中取出一个数作为基准数。 n 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
二维数组快速排序
<phpnnclass Goods{nn //方法一:nn public static function main($data, $col)n {n $ardata = self::sortt($data, $col);n return $ardata;n }nn private static function sortt($data, $
机试算法讲解:第2题 结构体之快速排序
/*n题目:n学生成绩排序:成绩从低到高,姓名字母从低到高(区分大小写),年龄从低到高排序n输入:n3nabc 20 99nbcd 19 97nbed 20 97nn输出:nbcd 19 97nbed 20 97nabc 20 99nn易错点:n1对于字符指针,scanf("%s",ps[i].sName)不需要取地址符n2对于名字,要指定大小,否则内存访问非法,char sName[128];而
Java 实现快速排序法对数组进行排序
 快速排序是对冒泡排序的一种改进,其排序速度相对较快。nn基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按照这个方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列的目的。最坏情况的时间复杂度为O(N ^ 2),最好为O(nlog2n)。nn快速排序的实现过程:假设要排序的数组是A [1] ....
数组排序算法之起泡法
原理:nn起泡法是从一端开始比较的,第一次循环就是把最大数放到最后一个位置,第二次循环就是把第二最大数放到倒数第二位置。整个过程就像烧开水一样,较小值像水中的气泡一样逐趟往上冒,每一趟都有一块“最大”的石头沉到水底。nn原理描述:nn有一个包含n个元素的数值型数组,数组元素大小无序。nn遍历一次数组,将数组中最大的值排至最后一位的位置。nn再循环一次数组,此次只需遍历n-1次,并将n-1个数中最大...
C语言:对指针数组中N个指针元素进行大小排序
n#include&amp;lt;stdio.h&amp;gt;n#include&amp;lt;string.h&amp;gt;n#include&amp;lt;stdlib.h&amp;gt;nint main()n{n int n;n printf(&quot;please input num:\n&quot;)// 输入字符串个数n scanf(&quot;%d&quot;,&amp;amp;n);n char *str[n];n char *ptr =...
经典排序算法——快速排序及其优化
快速排序nn快速排序的思想:通过一趟排序将数据分割成独立的两部分,其中一部分数据都比另一部分的所有数据都要小,然后再按照此方法对这两部分数据分别进行快速排序,可以递归的进行。nn时间复杂度:nn好的情况(无序的):O(nlog2n)n 坏的情况(有序的):O(n^2)nnn快速排序法不稳定。nnnn让我们先通过一个例子来了解一下:nn12 5 4 25 10 15...
算法——快速排序、希尔排序、堆排序
上一篇文章 简单算法——直接插入、冒泡、直接选择介绍了简单排序法,本文在上一篇的基础上,介绍各简单排序法对应的高级算法。 n首先依然是做一个公共的元素置换函数nnnn/**n * 交换数组元素n * 交换思想很简单 数字x y =&amp;amp;gt; x=x+y;y=x-y;x=x-y;n * 这种方法不使用临时变量,能有效降低算法空间复杂度,但也有缺点,比如可能存在越界风险n ...
编程实现直接插入排序、希尔排序、冒泡排序、快速排序、选择排序
代码#include <iostream>nusing namespace std;n//直接插入排序nvoid insert_sort(int a[],int n)n{n int i , j , temp;n for(i = 1;i<n;i++)n {n temp = a[i];n for(j=i-1;j>=0&&temp<a[j]; j--)
(排序算法)linux c语言实现快速排序(冒泡排序的改进版)
 快速排序算法是对冒泡排序算法的一种改进,冒泡排序是对单个元素的升降,快速排序是对所有元素的升降,不过这个升降是取了某一个标准的前提下,在本文代码中,就以a[i],其实就是以最左边的元素为参考,比较交换之后,将这个参考元素放到分界的地方,即i的位置。nn代码如下,里面有比较详细的注释。nnn/***************************************************n#...
快速排序(三种算法实现和非递归实现)
快速排序(Quick Sort)是对冒泡排序的一种改进,基本思想是选取一个记录作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于枢轴,另一部分都大于枢轴。然后继续对这两部分继续进行排序,从而使整个序列达到有序。递归实现:void QuickSort(int* array,int left,int right)n{n assert(array);n if(left &amp;amp;gt;=
C--排序算法:shell排序、快速排序
 nn1、shell排序nnShell排序是这样来分组并排序的:将序列分成子序列,然后分别对子序列进行排序,最后将子序列组合起来。Shell排序将数组元素分成“虚拟”子序列,每个子序列用插入排序方法进行排序;另一组子序列也是如此选取,然后排序,依此类推。在执行每一次循环时, Shell排序把序列分为互不相连的子序列,并使各个子序列中的元素在整个数组中的间距相同。例如,为方便起见,我们设数组中元素的...
快速排序算法手工实现及qsort、sort运用
快速排序算法手工实现及qsort、sort运用 n1. 快速排序算法nn(1) 设置两个变量i、j,排序开始的时候:i=0,j=N-1;n(2) 以第一个数组元素作为关键数据,赋值给key,即key=A[0];n(3) 从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;n(4) 从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于
C语言提升篇---函数指针的应用 实现排序
二话不说,贴上代码nnn/*n 函数指针的应用n 实现排序(从小到大和从大到小)n by_Murphy n nn 2018/8/21n*/n#include&amp;lt;stdio.h&amp;gt;nint is_max(int x, int y){ return x &amp;gt; y; }nint is_min(int x, int y){ return x &amp;lt; y; }nnvoid buSo...
c语言实现10个数由小到大排序(快速排序法)
快速排序原理: n从序列“2,3,5,7,9,6,4,1,0,8”两端开始 n(1)首先将2作为基准数,应用2个变量i和j分别指向序列左端和右端; n(2)首先从j左往右寻找一个小于2的数,i从右往左寻找一个大于2的数; n(3)找到了0和3进行第一次交换,继续搜索; n(4)1和5进行第二次交换; n(5)当i和j都到1数值1时,表明第一轮交换结束,将基准数2和1进行交换,以基准数2为分界点,2...
js实现快速排序,冒泡排序,选择排序,直接插入排序、希尔排序
1.思想:nn快速排序应该是最常用的排序算法了。它的时间复杂度比冒泡排序,直接插入排序等低,且它的性能通常比其他的排序算法要好。和归并排序一样,快排也使用了分而治之的思想。将原始数组分为小数组nnnn1)首先,选取数组中间元素作为基准点nnnn2)创建两个新数组left和right,遍历原始数组,把比中间元素小的元素放在left数组, 把比中间元素大的元素放在right数组nnnn3)left数组...
快速排序算法在字符串数组排序中的应用
快速排序算法在字符串数组排序中的应用
排序之sort排序
C++的STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件&amp;lt;algorithm&amp;gt;这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b),即sort(数组+a,数组+b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只...
排序算法之快速排序<Quick_Sort>及其C语言代码实现
快速排序(Quicksort)是对冒泡排序的一种改进。 n快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 n(以上来自百度百科) n简单的说,就是将序列分为两个部分,首先从序列
求第k小元素的快速排序算法
/*n Name: 第k小元素n Copyright: n Author: n Date: 13-04-17 15:28n Description: 求一列数中的第k小元素,利用分治的策略进行递归求解。n 模仿快速排序法的思路,只不过每次只递归处理第k小元素所在的序列。n 使用消除尾递归优化后效果更好。 n*/n#includen#includen#includen#includen
数组快速排序 二分法排序
&amp;lt;script&amp;gt;n //快速排序的思想:n //1)我们首先在数组中找一个基准点(一般把基准点选择为数组中间的这一项)n //Math.floor(ary.length/2)例如 一共9项,获取的结果是4(第五项,正好是中间项,一共10项,获取的结果是5(第六项,也接近中间项;))n //2)拿基准点和数组中的其他项进行比较,比基...
两种链表排序法(快速排序和合并排序)
n# 链表快速排序nclass nodelist:n def __init__(self,x):n self.val = xn self.next = Nonenclass Solution:n def sort(self,phead):n if phead == None:n return Nonen el...
冒泡排序、简单选择排序、插入排序和快速排序(附源代码)
1.冒泡排序n冒泡排序是逻辑最简单的一种排序方法,通过相邻两个数比较交换来实现。从最后一个数开始,两两比较,将最小的数交换到前面。这样在第一次比较交换后,第一个数就是最小的,第二次就可以不用再比较第一个数。源代码实现如下:n nvoid bubble_sort(int *a,int num)//冒泡排序法n{n register int i,j,temp;n for(i=0;ii;j--)
利用C语言实现数组的排序(简单选择排序法)
简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。n#pragma oncen#include &lt;stdio.h&gt;nint swap(int a[],int min,int i)n{n int b = a[min];n a[min] = a[i];n a[i] = b;n re...
C语言--数组实现--各种排序算法个人总结
C语言--数组实现--排序算法:插入排序;希尔排序;冒泡排序;快速排序1;快速排序2;堆排序;归并排序;基数排序;选择排序;计数排序;
用数组和指针两种方式排序
本次排序采用冒泡拍排序首先,请看用数组的方法进行排序10个数据排序,需要排9趟,每趟需要将数据比较len-i次,sizeof(a)是数组总字节,sizeof(a[0])是第一个元素字节,相除计算的是数组元素个数第二种,用指针的方法进行排序:在每次内部循环结束后,需将start重新赋值,因为需要再次从第一个数据进行比较。一次内部循环后,有一个数据在正确位置上,如第一次内部循环结束后,最大值在最后...
快速排序 c语言代码实现
快速排序nn快速排序,顾名思义,是一种排序速度非常快的排序方法,该算法之所以非常快,是因为高度优化的内部循环,该算法在实际应用中非常广泛。nn快速排序是一种采用分治思想,在实践中通常运行较快一种排序算法nn nn代码实现c语言版nn nnn#include &amp;lt;stdio.h&amp;gt;n#include &amp;lt;stdlib.h&amp;gt;nn#define N 7nnn//函数dayin:打印数组...
用C语言实现快速排序算法
一、快速排序算法(Quicksort)n1. 定义n快速排序由C. A. R. Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。nnnn2. 基本思想n通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
用静态变量计算n的阶乘
#include <stdio.h>nlong Func (int n );nint main( )n{n int i,n;n printf (" Input n:");n scanf("%d",&n);n for(i=1; i<=n;i++)n {n printf ("%d!=%1d\n",i,Func(i));n }n return 0;
利用栈完成后缀表达式的计算
后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将后缀表达式的结果计算出来。输入后缀表达式。以#号作为表达式结束标志。为了简单,处理的数据为0-9的整数。输出计算结果。样例输入3 6 6 2 / - 3 * +#样例输出12#include&amp;lt;stdi...
通过函数指针实现四则运算
希望在增加整数运算函数时,只需添加整数运算韩束本身,而无需修改运算函数,这就需要在运算函数中使用函数指针来代替指针运算类型参数。nnint process(int a,int b,int(* p)((int ,int)){return p(a,b);}nnint main()nn{nnint a=10,b=20;nnint res1=process(a,b,add);nnint res2=proc...
利用函数指针实现多级排序
我们在实际应用中的排序可能会不止一种,这时我们可能会在之前的基础上,进行进一步的比较,说白了,也就是多级排序。rn如何能实现自己的多级排序呢?如何能够利用泛型的思想,相对什么数据进行排序就可以对什么数据进行排序,在写今天这篇博客之前,我们虽然都接触过函数指针,但很少去使用,也许是在学校根本涉及不到,因此,我们并不能知道其强大的功能。rn最近看到这样一个题,要求从文件中读取一个学生的结构体,在成绩的
【算法】快速排序算法(递归实现 从小到大排列) 排序范围(0~n-1) n为数组元素个数
  今天就来谈谈快速排序,我们也不详谈快速排序的时间复杂度,我们重点来分析一下快速排序的思想。nn  快速排序的思想十分简单,假设给定一个无序的数组,我们要从小到大排列,我们只需要完成以下几步nn   1、选取这个数组中的某一个元素为基准值,它的下标为基准点,这样数组就被分成了左右两个部分nn   2、将这个基准点左边的所有元素排好序(比这个基准值小)nn   3、将这个基准点右边的所有元素排好序...
快速排序算法C语言实现
/*n ============================================================================n Name : InsortDemo.cn Author : 董乐强n Version :n Copyright : Your copyright noticen Description : Hello
基于快速排序寻找第k小元素
基于快速排序寻找数组中的第k小元素rn#include n#include nusing namespace std;n#define Max 100nnint Search(int a[],int n,int k);nvoid Print(int a[],int n);nnint main()n{n int a[]={98,33,21,102,45,5,32,11,65,82,193,321,3
c语言指针实现快速排序
#includen#includennint Partition(int *Array,int i,int j)n{n int t = *(Array + i);nn while(i<j)n {n while(i=t)n n j--;n n if(i<j)n {n
利用C语言实现数组的排序(直接插入排序法)
直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。n#pragma oncen#include &lt;stdio.h&gt;nint insort(int s[], int n) n{n int i,j;n for(i=2;i&lt;=n;i++) n {n s[0]=s[i]; n j=i-1; n while(s[0]&...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 人工智能培训谢谢 python廖雪峰学习完成