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

c语言数组从低到高排序

发布时间: 2022-03-05 13:26:11

‘壹’ c语言中定义一种函数使一组数从高到低排序

给你一个直接插入排序
#include "stdio.h"
void InsertSort(int a[], int left, int right) {//对数组a从下标为left到right区域进行直接插入排序
int i, j, tmp;
for(i = left + 1; i <= right; i++) {
for(j = i - 1, tmp = a[i]; j >= left && tmp > a[j]; j++)
a[j + 1] = a[j];
a[j + 1] = tmp;
}
}

void main( ) {
int i, n, a[100];
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
InsertSort(a, 0, n - 1);
printf("\n");
for(i = 0; i < n; i++) printf("%d\t", a[i]);

‘贰’ C语言用一维数组,输入学生成绩和姓名,将成绩从高到低排序,对姓名做相应的调整,输出排序后的成绩姓名

一维数组 按你理解应该怎么存储多个名字?
一维char是一个连续的字符串 所以你使用b[i]访问他的时候 只能读取或写入一个字符 而名字是有多个字符组成的。
用一维数组表示字符串是比较麻烦的 你可以先定义一个大的char数组
比如 char b[最大名字个数*10]
然后 再
for(int i=0;i<3;i++){
scanf("%s",&b[i*10]);//每一次循环向后移动10个字符位置
}
然后说一下 你gets(b[i]) 函数应该传char* 也就是字符指针 而不是字符 应该是 &b[i]
再就是没有看到声明p变量
最后查一下排序有没有问题吧

‘叁’ C语言考试试题:定义一个100位学生的结构体数组,按成绩从高到低进行排序

我现写的一个,简洁明了,应该是符合你的口味的,测试完全通过
#include <stdio.h>
#define N 100
typedef struct student
{
int id; //学号
char name[20]; //姓名
int gender; //性别(0代表男生,1代表女生)
float score; //成绩
}stu;
stu s[N];
int main()
{
int i;
for(i=0;i<N;i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%d",&s[i].id);
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",&s[i].name);
printf("请输入第%d个学生的性别:",i+1);
scanf("%d",&s[i].gender);
printf("请输入第%d个学生的成绩:",i+1);
scanf("%f",&s[i].score);
}
stu ss[N];
stu* p=ss;
for(i=0;i<N;i++)
ss[i]=s[i];
for(i=0;i<N-1;i++)
{
for(int j=i+1;j<N;j++)
{
if(ss[i].score<ss[j].score)
{
stu temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
printf("所有学生的信息按成绩由高到低排名如下:\n");
printf("学号\t姓名\t性别\t成绩\n");
for(i=0;i<N;i++)
{
printf("%d\t%s\t%d\t%.1f\n",(p+i)->id,(p+i)->name,(p+i)->gender,(p+i)->score);
}
return 0;
}

‘肆’ c语言数组的排序

可以采用冒泡排序的方法。以下给题主一个对既定数组进行升序、降序排序的代码

#include<stdio.h>
#include<time.h>

#defineelemTypeint/*元素类型*/
#defineLEN100/*数组长度上限*/

#defineASC0/*升序*/
#defineDESC1/*降序*/

/*冒泡排序*/
/*参数说明:*/
/*elemTypearr[]:排序目标数组*/
/*intlen:元素个数*/
/*intorder:排序方式;升序(由小到大):ASC;降序(由大到小):DESC*/
voidbubbleSort(elemTypearr[],intlen,intorder){
inti,j,temp;

for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++){
if(order==ASC){/*升序*/
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
elseif(order==DESC){/*降序*/
if(arr[j]<arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}

/*打印数组*/
voidprintArr(elemTypearr[],intlen){
inti;
for(i=0;i<len;i++)
printf("%d ",arr[i]);
putchar(' ');
}

intmain(void){
elemTypearr[LEN]={3,5,1,7,2,9,6,8,10,4};
intlen;

len=10;

puts("初始数组:");
printArr(arr,len);
putchar(' ');

puts("升序排列:");
bubbleSort(arr,len,ASC);/*升序冒泡排序*/
printArr(arr,len);
putchar(' ');

puts("降序排列:");
bubbleSort(arr,len,DESC);/*降序冒泡排序*/
printArr(arr,len);
putchar(' ');

getch();/*屏幕暂留*/
return0;
}

运行结果

‘伍’ 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),编程简单,效率高,但是应付的数据范围不能太大,受到内存大小的限制)。 平时比较常用的就是快速排序,程序简单,效率也可以接受。 这是我了解的一些东西,希望对你有帮助。

‘陆’ c语言数组从小到大排序

#include<stdio.h>
int main(void)
{
int n, i, index, k, temp = 0;

int a[10];

printf("Enter n:");

scanf("%d", &n);

printf("Enter %d numbers:", n);

for (i = 0; i < n; i++)

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

for (k = 0; k < n; k++)

{
index = k;

for (i = k + 1; i < n; i++)

{
if (a[i] > a[index])

index = i;

temp = a[index];

a[index] = a[k];

a[k] = temp;

}
}

for (i = 0; i < n; i++)

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

return 0;

}
这是修改了的
你的思路没错,就是在第三个for后要个大括号把
if(a[i]>a[index])
index=i;
temp=a[index];
a[index]=a[k];
a[k]=temp;括起来。

‘柒’ c语言 数组 从大到小排序

#include<stdio.h>
int
main(void)
{
int
n,
i,
index,
k,
temp
=
0;
int
a[10];
printf("Enter
n:");
scanf("%d",
&n);
printf("Enter
%d
numbers:",
n);
for
(i
=
0;
i
<
n;
i++)
scanf("%d",
&a[i]);
for
(k
=
0;
k
<
n;
k++)
{
index
=
k;
for
(i
=
k
+
1;
i
<
n;
i++)
{
if
(a[i]
>
a[index])
index
=
i;
temp
=
a[index];
a[index]
=
a[k];
a[k]
=
temp;
}
}
for
(i
=
0;
i
<
n;
i++)
printf("%d",
a[i]);
return
0;
}
这是修改了的
你的思路没错,就是在第三个for后要个大括号把
if(a[i]>a[index])
index=i;
temp=a[index];
a[index]=a[k];
a[k]=temp;括起来。

‘捌’ c语言将数组从小到大排序

#include<stdio.h>
intmain()
{
inta[20];
inti,j,temp;
int*p=&a[0];
int*d;
intn;
printf("请输入数组长度");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入这个数组 ");
scanf("%d",p++);//<=================

}
for(p=a;p<a+n;p++)//<=================
{
for(d=p+1;d<a+n;d++)//<=================
{
if(*p>*d)
{
temp=*p;
*p=*d;
*d=temp;
}
}
}
p=a;
for(p;p<a+n;p++)
{
printf("%d ",*p);

}
return0;
}

‘玖’ 求C语言将数组元素大小排序!!

C语言将数组元素大小排序方法:

以下使用的是冒泡排序法实线数组从小到大排序。

思想:每次相邻两个数比较,若升序,则将大的数放到后面,一次循环过后,就会将最大的数放在最后。

10、2、3、4、5、6、9、8、7、1是输入的待排序的数列,经过第一次排序,将最大的,10放在最后,第二次排序,将剩下的2、3、4、5、6、9、8、7、1进行冒泡,将当前最大的9放在倒数第二的位置,以此类推。

以下是具体代码:

#include <stdio.h>

int main(){

int nums[10] = {10, 2, 3, 4, 5, 6, 9, 8, 7, 1};

int i, j, temp, isSorted;

//优化算法:最多进行 n-1 轮比较

for(i=0; i<10-1; i++){

isSorted = 1; //假设剩下的元素已经排序好了

for(j=0; j<10-1-i; j++){

if(nums[j] > nums[j+1]){

temp = nums[j];

nums[j] = nums[j+1];

nums[j+1] = temp;

isSorted = 0; //一旦需要交换数组元素,就说明剩下的元素没有排序好

}

}

if(isSorted) break; //如果没有发生交换,说明剩下的元素已经排序好了

}

for(i=0; i<10; i++){

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

}

printf(" ");

return 0;

}

(9)c语言数组从低到高排序扩展阅读:

其他将数组从小到大排序的算法

以下使用的是选择排序法实现数组从小到大排序。

思想:从第一个数开始,每次和后面剩余的数进行比较,若升序,则如果后边的数比当前数字小,进行交换,和后面的所有的数比较、交换后,就会将当前的最小值放在当前的位置

输入的序列为10、2、3、4、5、6、9、8、7、1进行一次排序后将最小的数放在了第一位(a[0]与它后面的所有数进行比较,若a[0]比后面的数大,进行交换),以此类推。

以下是具体代码:

#include <stdio.h>

int main(void){

int a[1001];

int n,i,j,t;

scanf("%d",&n);//n为要排序的数的个数

//输入需要排序的数

for(i=0;i<n;++i)

scanf("%d",a+i);

//接下来进行排序

for(i=0;i<n-1;++i)//因为每次需要和a[i]后面的数进行比较,所以到a[n-2](倒数第2个元素)就行

{

for(j=i+1;j<n;++j)//j从i后一个开始,a[i]与a[j]进行比较

{

if(a[i]>a[j])//a[i]为当前值,若是比后面的a[j]大,进行交换

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}//每排序一次,就会将a[i](包括a[i])之后的最小值放在a[i]的位置

for(j=0;j<n;++j)

printf("%-5d",a[j]);

printf(" ");

}

return 0;

}

‘拾’ 编写C语言程序,把一个数组按从小到大的次序排列起来

源程序以及算法注释如下:

#define _CRT_SECURE_NO_WARNINGS//VS编译环境需要进行宏定义,VC6.0可忽略

#include<stdio.h>//输入输出头文件

int main()

{

int number[10], New_number[10];//定义数组的数据类型为整型

int i, j, m, n, k;//定义变量的数据类型为整型

printf("input 10 <int> number:");//文字提示

for (i = 0; i <= 9; i++)//用循环输入数值给数组number并赋给数组New_number

{

scanf("%d", &number[i]);//输入10个整形数字到数组中

New_number[i] = number[i];//数组number元素赋给数组New_number

}

for (n = 0; n <= 8; n++)//要进行(10-1)组比较

for (j = 0; j <= 8 - n; j++)//每组进行(10减第几组)次比较

{

if (number[j] > number[j + 1])//比较大小并将小的赋给前面的数组

{

k = number[j];//将相对较大的元素赋值给中间元素

number[j] = number[j + 1];//将相对较小的元素送达前面一个位置

number[j + 1] = k;//将中间变量元素送给后面一个位置

}

if (New_number[j] < New_number[j + 1])//比较大小并将大的赋给前面的数组

{

k = New_number[j + 1];//将相对较小的元素赋值给中间元素

New_number[j + 1] = New_number[j];//将相对较大的元素送达前面一个位置

New_number[j] = k;//将中间变量元素送给后面一个位置

}

}

printf("min-->max: ");//文字提示

for (m = 0; m <= 9; m++)//依次从小到大输出

printf("%d ", number[m]);//输出元素

printf(" ");

printf("max-->min: ");//文字提示

for (m = 0; m <= 9; m++)//依次从大到小输出

printf("%d ", New_number[m]);//输出元素

printf(" ");

return 0;

}

程序运行结果如下:



(10)c语言数组从低到高排序扩展阅读:

其他简单实现程序:

#include<stdio.h>

int main()

{

int a[10]={0};

int i,j,temp;

for(i = 0;i<10;i++)

{

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

}

for(i = 0;i<10;i++)

{

for(j = 0;j<10-i-1;j++)

{

if(a[j]>a[j+1])

{

temp = a[j];

a[j] = a[j+1];

a[j+1] = temp;

}

}

}

for(i = 0;i<10;i++)

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

return 0;

}