当前位置:首页 » 编程语言 » c语言对数组排序
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言对数组排序

发布时间: 2022-02-16 00:56:35

⑴ 用c语言对一维数组排序,并输出已排好元素的原来位置

简单的思路:

定义一个指针数组,找到b数组中元素在a数组中的地址,并存储在指针数组对应位置。

之后将指针数组内的地址值依次取出来与a数组首地址相减,得到的就是原来的位置。

利用的原理:数组内地址是连续的!

#include<stdio.h>
intmain()
{
inta[5]={3,8,4,7,6},b[5]={8,7,6,4,3},c[5],i,j,*p[5];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(b[i]==a[j])
p[i]=&a[j];
}
}

for(i=0;i<5;i++)
c[i]=p[i]-&a[0]+1;
printf("原来的位置数组c[5]={%d,%d,%d,%d,%d} ",c[0],c[1],c[2],c[3],c[4]);
}

⑵ C语言数组排序 简单选择排序

lz你的输出函数用错了,你的打印结果是内存地址,看了你的排序函数没问题,只要修改下printf函数就ok了,这样写printf("%d ",a[i]);

⑶ C语言中怎样把一个多维数组排序

同意一楼方法,讲二维数组存到一维数组中,然后用qsort排序,再存到二维数组当中
代码敲了一下,发现C语言快忘光了

#include <stdio.h>
#include <stdlib.h>

int comp(const void *a , const void *b){
return *(int *)b - *(int *)a; //这是b-a,如果是a-b就是从小到大排序
}

int main(){
int a[3][3];
int b[9];
int n;
int i , j , k;
for(i = 0 , k = 0; i < 3 ; i ++)
for(j = 0 ; j < 3 ; j ++){
scanf("%d",&a[i][j]);
b[k++] = a[i][j]; // k ++别看漏
}
qsort(b,9,sizeof(int),comp);//qsort函数很简单的,看看就会,不怕麻烦,comp函数是指定排序是从小到大还是从大到小
for(i = 0 , k = 0; i < 3 ; i ++)
for(j = 0 ; j < 3 ; j ++){
a[i][j] = b[k++];
printf("%d",a[i][j]);
}
system("pause");
return 0;
}
qsort看不懂再给你个网络的链接
http://ke..com/view/982231.htm
自己再敲一次吧,代码是敲出来的,多练练
ps:那个int n是多余的,你的代码测试了,可以

⑷ C语言中怎样实现将数组中的整数进行升序排列

可以。。 #include "stdio.h"
void main()
{int a[10],i,j,t;

printf("enter 10 Z_nums:\n"); //提示输入10个整数
for(i=0;i<10;i++)
scanf("%d",&a[i]);

for(i=0;i<9;i++) //冒泡排序排列10个整数
for(j=0;j<10-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;} printf("The sorted nums:\n");
for(i=0;i<10;i++) //输出排序后的10个整数
printf("%d ",a[i]);
printf("\n");
}

⑸ C语言编写函数,数组排序

void Swap(int *a, int *b)

{

int tmp = *a;

*a = *b;

*b = tmp;

}

void Selectsort(int *arr, int sz)

{for (int end=sz-1; end>=0; end--)

{

int max = end;

int i;

for ( i = 0; i <= end; i++)//选出最大下标

{

if (arr[i] > arr[max])

{

max = i;

}

}

Swap(&arr[end], &arr[max]);

}

}

int main()

{

int arr[5] = { 1, 3, 2, 5, 4 };

int sz = sizeof(arr) / sizeof(arr[0]);

for (int i = 0; i <= sz - 1; i++)

{

scanf("%d", &arr[i]);

}

Selectsort(arr, sz);

for (int i = 0; i <= sz - 1; i++)

{

printf("%d ", arr[i]);

}

system("pause");

return 0;

}

(5)c语言对数组排序扩展阅读:

printf函数使用注意事项

1、域宽

%d:按整型数据的实际长度输出。

如果想输出指定宽度可以指定域宽,%md--&gt;m域宽,打印出来以后,在控制台上,显示m位;

如果要打印的数的位数如果超过我们设定m则原样输出;

如果要打印的数的位数如果小于设定的位数,则补空白,具体如下:

如果m为正数,则左对齐(左侧补空白);

如果m为负数,则右对齐(右侧补空白)。

2、转义字符

如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。

如:printf("%f%%",1.0/3);输出结果:0.333333%。

⑹ c语言对一维数组排序

#include <stdio.h>
int main()
{
int i,j,t,a[11]; //定义变量及数组为基本整型
printf("请输入10个数:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]); //从键盘中输入10个数
for(i=1;i<10;i++) //变量i代表比较的趟数
for(j=1;j<10-i;j++) //变最j代表每趟两两比较的次数
if(a[j]>a[j+1])
{
t=a[j]; //利用中间变量实现两值互换
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序后的顺序是:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]); //将冒泡排序后的顺序输出
printf("\n");
return 0;
}

⑺ c语言中,用一维数组排序十个整数,怎么做

需要准备的材料分别有:电脑、C语言编译器。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

⑻ C语言数组排序方法

选择排序的原理是,每次从待排序数字中挑选出最大(最小)数字,放在有序序列的末尾。实际操作中,只需要在这个数组中将挑出来的数字与前面的数字交换即可。例如:4
1 5
2 3找到最小的1,1和4交换1
4 5
2
3找到最小的2,2和4交换1
2
5
4
3找到最小的3,3和5交换1
2
3
4
5找到最小的4,4和4交换(不交换也可)可见,选择排序需要一个双重循环来完成,因此它的复杂度是O(n^2)在数据量比较大时,不建议使用这种排序方法。 其他排序方法有很多,你甚至可以自己根据不同数据规模设计不同的排序方法。比较常见的有冒泡排序,插入排序(这两种和选择排序一样,都是O(n^2)),二分法插入排序(降低了一些复杂度,但是涉及到大规模数据移动,效率依然不高),快速排序(平均复杂度O(nlogn),但是不稳定,最坏情况O(n^2)),随机化快速排序(很大程度上避免了最坏情况的出现),堆排序(O(nlogn),编程复杂度高),基数排序(理论复杂度O(n),实际要比这个慢。甚至能应付字符串排序,但是编程复杂度高,牵扯到其他数据结构),桶排序(O(n),编程简单,效率高,但是应付的数据范围不能太大,受到内存大小的限制)。 平时比较常用的就是快速排序,程序简单,效率也可以接受。 这是我了解的一些东西,希望对你有帮助。