c语言中数组排序怎么做?

作者&投稿:毋法 (若有异议请与网页底部的电邮联系)
~ C语言中没有内建的数组排序功能,需要手动实现排序算法或者使用函数库如 `qsort`。下面我将介绍如何使用C标准库中的 `qsort` 函数进行排序,以及如何手动实现一个简单的冒泡排序。
### 使用 `qsort` 函数
C语言标准库提供了 `qsort` 函数,它可以对各种类型的数组进行排序。其函数原型如下:
```c
void qsort(void *base, size_t num, size_t size,
int (*comparator)(const void *, const void *));
```
这里 `base` 是数组的指针,`num` 是数组中元素的数量,`size` 是每个元素的大小(以字节为单位),`comparator` 是一个比较函数指针,用于定义排序的顺序。
比如给 `int` 类型数组排序的比较函数可以写如下:
```c
int compare(const void *a, const void *b) {
int int_a = *((int*)a);
int int_b = *((int*)b);
if (int_a == int_b) return 0;
else if (int_a < int_b) return -1;
else return 1;
}
```
然后,你可以这样使用 `qsort`:
```c
int numbers[] = {7, 3, 5, 2, 1, 4, 6};
int size = sizeof(numbers) / sizeof(numbers[0]);
qsort(numbers, size, sizeof(numbers[0]), compare);
```
### 手动实现冒泡排序
冒泡排序是一种简单但效率较低的排序算法。它重复地遍历数组,比较相邻元素,并在逆序时交换它们。以下是冒泡排序的一个简单实现:
```c
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
// 交换 arr[j] 和 arr[j+1]
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
// 使用冒泡排序:
int data[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(data)/sizeof(data[0]);
bubbleSort(data, n);
```
冒泡排序非常直观,但其时间复杂度为O(n^2),对于大型数据集来说效率不高。对于实际应用,通常会选择更高效的排序算法,如快速排序、归并排序等。`qsort` 函数通常使用快速排序或其它更复杂的算法,这取决于具体的库实现。


java怎么让数组的数字从大到小排序?
将数字从大到小排序的方法:例如简一点的冒泡排序,将第一个数字和后面的数字逐个比较大小,如果小于,则互换位置,大于则不动。此时,第一个数为数组中的最大数。然后再将第二个数与后面的数逐个比较,以次类推。示例代码如下: public class Test { public static void main(String[] args) { ...

汇编语言把数组里的数据升序排序
下图程序,就可以实现。反相显示的,就是排序部分。本程序已经经过实验。

C语言数组A用选择排序
快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j). 它首先选一个数组元素(一般为a[(i +j)\/2],即中间元素)作为参照,把比它小 的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。下面分析其...

C语言中说的按字典顺序是什么意思?
就是说,将多个字符串的同一位置的字符按照26个字母的顺序进行比对。a最小,z最大。a < b;aa < ab; 因为第二位置上,前面字符串是a,后面字符串是b,所以是小于关系,以此类推。C语言排序算法:快速排序:1、假设我们给一个int数组进行排序,数组中数字初始序列为int a[9]={3,6,5,9,7...

c语言数组排序中的选择法是什么意思啊?
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中 选出 最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。所以这种排序的方法叫选择法排序。C语言参考实例:include <stdio.h>void main(){ int a[]={1,3,4,2,...

C语言 如何对二维数组进行按列排序?
无论是多少维的数组,机内都是一维的,以行优先存放。所以直接降为一维数组排序最方便省事。下面以二维数组为例写出代码——include "stdio.h"int main(int argc,char *argv[]){int x[3][3]={{9,4,3},{6,2,7},{5,8,1}},i,j,k,*p;printf("Before ordering is as follows:\\n");...

c语言中怎么判断数组中每一个数是按从小打大排序?
判断:数组中的元素,若前一个元素数值 大于下一个元素数值,则 是 错误的排列;否则,就是正确的排列(即 下一个数大于等于 前一个数)。假定数组 有 n 个元素,数组元素数值 已知,程序如下:include <stdio.h> int main(){ int a[10]={1,2,3,4,5,6,7,8,9,-10};int i;int ...

求C语言编程编写函数sort:对数组a中的数进行从小到大排序
我介绍两种排序方法吧 1 选择排序 void sort(int a[ ],int length) \/* 这个数组数据类型你可以自己更改 float 也可以 不过其他的也要相应的改 比如%d改为%f等,length 为数组长度*\/ {int *p,temp,i=0,*min;while(i<length){ min=&a[i];for(p=a+i;p<a+length;p++){if(*p<*mi...

你好 你能教教我怎么编程么?关于c语言中的数组排序问题
1.用排序算法从小到大以此排好放到数组B中。2.然后寻找number在数组中的位置,这个位置后面的数(包括这个位置的数)全部往后移动一位,然后把number插入这个位置就可以了、具体实现的代码还得你自己写,毕竟编程这东西还得自己亲自动手实践的好,那样才是自己的东西,或者你可以把你的代码贴上来给我们看...

C语言,用选择法对数组中10个整数按由小到大排序?求解释!!!
选择排序的思想是:每一趟的排序过程都是在当前位置后面剩下的待排序对象中选出值最小的那个,然后放到当前位置上。该程序中k的定义主要是为了存放数组中最小数的位置。然后通过t=array[k];array[k]=array[i];array[i]=t;这三条语句,再把这数组中最小的数字放到前面。注意C语言当中的“=”不...

上犹县18892832176: C语言数组排序方法 -
贺码强压: 像是选择法排序,但不太简练! 正确的选择法为: #include <stdio.h> void main(void) {int a[9]={3,42,55,546,43,323,54,121,32},i,j,l,temp; for(i=0;i<9;i++) for(j=i+1;j<8;j++) if(a[i]<a[j]) {temp=a[i]; a[i]=a[j]; a[j]=temp;} for(l=0;l<9;l++) printf("%d\n",a[l])...

上犹县18892832176: c语言中的数组排序 -
贺码强压: #include #include int numSort(int *a,int count_num) { int i,j,min=-1,temp;for(j=count_num-1;j>0;j--)for(i=j-1;i>=0;i--)if(a[j] > a[i]){ temp=a[i]; a[i]=a[j]; a[j]=temp;min=i;j=0;break;}if(min==-1) return 0;for(i=min+1;i for(j=i+1;j if(a[j] < a[i]) ...

上犹县18892832176: C语言 数组排序 -
贺码强压: void sort(int a[],int n) { for(int i=0;ifor(int j=i+1;j{ if(a[i]>a[j]) { int temp; //这个定义也应放在开始 temp=a[i]; a[i]=a[j]; a[j]=temp; } } } void exe5() { int a[10]; for(int i=0;i<10;i++) //这里的定义 scanf("%d",a[i]); sort(a,10); for(i=0;i<10;i++) printf("%d|",a[i]); //这里为什么用long型,你定义的是int型啊 }

上犹县18892832176: C语言中数组的排序方法中, -
贺码强压: 选择排序的原理是,每次从待排序数字中挑选出最大(最小)数字,放在有序序列的末尾.实际操作中,只需要在这个数组中将挑出来的数字与前面的数字交换即可. 例如: 4 1 5 2 3 找到最小的1,1和4交换 1 4 5 2 3 找到最小的2,2和4交换 1 2 5...

上犹县18892832176: C语言数组排列怎么做?
贺码强压: 最常用的就是冒泡排序的方法了. 比如对10个数字进行排序,则程序是这样的 #include<stdio.h>void main(){ int a[10]; int i,j, t; printf("输入十个数字:\n"); for(i=0;i<=9;i++) { scanf("%d",&a[i]); } for(i=0;i<=9;i++) { for(j=0;j<=8-i;j++) { if(a[j]>a...

上犹县18892832176: C语言中怎么对数组随机排序? -
贺码强压: #include<stdio.h> #include<time.h> #include<stdlib.h> #define SIZE 1000 main() {int ary[SIZE],i=0,j,k;time_t t;srand((unsigned)time(&t));//随机数的产生与系统时间有关for(i=0;i<SIZE;i++) //输出生成数结果{ary[i]=rand()%1000+1;k=find(...

上犹县18892832176: C语言对N个数进行排序 -
贺码强压: #define N=10;//对10个数排序 main() { int a[N]; int i,j,t; printf("input 10 numbers:\n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); printf("\n"); for(j=1;j<=9;j++) for(i=1;i<=10-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("the sorted numbers is:\n"); for(i=1;i<=10;i++) printf("%d",a[i]); }

上犹县18892832176: 用C语言对一维数组排序,并输出原来的位置 -
贺码强压: 可以先用冒泡排序对数组进行排序,然后对排序的数组进行遍历,找出其在排序之前数组中的位置,参考代码如下:#include<stdio.h>#include<string.h>#define N 5 int main() { int a[N],b[N],c[N],i,j,temp; for(i=0;i<N;i++){//输入数组,并用b保存数...

上犹县18892832176: C语言中如何对一组数进行排列 -
贺码强压: #include "time.h" #include "stdio.h" #include "stdlib.h"int aa[100]; int bb[100]; void main() {void ReadDat();//随机产生100个学生成绩存放到数组aa中,随机产生100个相应的学号存放到bb数组中void WriteDat();//输出排序后的...

上犹县18892832176: 用C语言做数组排序 -
贺码强压: //冒泡排序.... #include void main() { int n; int a[1001]; int i,j,temp; while(scanf("%d",&n)!=EOF) { for(i=0;ii;j--) { if(a[j]

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网