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

一维数组的排序c语言

发布时间: 2023-08-06 20:24:09

‘壹’ 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语言程序,用一维数组输入N个整数,将这n个整数按从大到小排列

给你看看C语言的三种排序方法吧,这是我们老师给总结的,你看懂后就自己在写这个程序吧!

一、冒泡法(起泡法)
算法要求:用起泡法对10个整数按升序排序。
算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。
算法源代码:
# include <stdio.h>
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
/*输入源数据*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);
/*排序*/
for(j=0;j<9;j++) /*外循环控制排序趟数,n个数排n-1趟*/
for(i=0;i<9-j;i++) /*内循环每趟比较的次数,第j趟比较n-j次*/
if(a[i]>a[i+1]) /*相邻元素比较,逆序则交换*/
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
/*输出排序结果*/
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
算法特点:相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。
二、选择法
算法要求:用选择法对10个整数按降序排序。
算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。
算法源代码:
# include <stdio.h>
main()
{
int a[10],i,j,k,t,n=10;
printf("Please input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*外循环控制趟数,n个数选n-1趟*/
{
k=i; /*假设当前趟的第一个数为最值,记在k中 */
for(j=i+1;j<n;j++) /*从下一个数到最后一个数之间找最值*/
if(a[k]<a[j]) /*若其后有比最值更大的*/
k=j; /*则将其下标记在k中*/
if(k!=i) /*若k不为最初的i值,说明在其后找到比其更大的数*/
{ t=a[k]; a[k]=a[i]; a[i]=t; } /*则交换最值和当前序列的第一个数*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
算法特点:每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序或升序排序。
三、插入法
算法要求:用插入排序法对10个整数进行降序排序。
算法分析:将序列分为有序序列和无序列,依次从无序序列中取出元素值插入到有序序列的合适位置。初始是有序序列中只有第一个数,其余n-1个数组成无序序列,则n个数需进n-1次插入。寻找在有序序列中插入位置可以从有序序列的最后一个数往前找,在未找到插入点之前可以同时向后移动元素,为插入元素准备空间。
算法源代码:
# include <stdio.h>
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++) /*外循环控制趟数,n个数从第2个数开始到最后共进行n-1次插入*/
{
t=a[i]; /*将待插入数暂存于变量t中*/
for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下标0 ~ i-1)中寻找插入位置*/
a[j+1]=a[j]; /*若未找到插入位置,则当前元素后移一个位置*/
a[j+1]=t; /*找到插入位置,完成插入*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
算法特点:每趟从无序序列中取出第一个数插入到有序序列的合适位置,元素的最终位置在最后一趟插入后才能确定位置。也可是先用循环查找插入位置(可从前往后或从后往前),再将插入位置之后的元素(有序列中)逐个后移一个位置,最后完成插入。该算法的特点是在寻找插入位置的同时完成元素的移动。因为元素的移动必须从后往前,则可将两个操作结合在一起完成,提高算法效率。仍可进行升序或降序排序。

这应该会对你很有用的,好好学,把它弄懂!祝你好运!

‘叁’ C语言题:输入十个数用一维数组分别用冒泡法与选择排序法进行排序

#include<stdio.h>
#include<conio.h>

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

/*冒泡排序*/
/*1.从当前元素起,向后依次比较每一对相邻元素,若逆序则交换*/
/*2.对所有元素均重复以上步骤,直至最后一个元素*/
/*elemTypearr[]:排序目标数组;intlen:元素个数*/
voidbubbleSort(elemTypearr[],intlen){
elemTypetemp;
inti,j;
for(i=0;i<len-1;i++)/*外循环为排序趟数,len个数进行len-1趟*/
for(j=0;j<len-1-i;j++){/*内循环为每趟比较的次数,第i趟比较len-i次*/
if(arr[j]>arr[j+1]){/*相邻元素比较,若逆序则交换(升序为左大于右,逆序反之)*/
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}

/*选择排序*/
/*1.将初始数组分为两段,前段为已排序数组,后段为未排序数组*/
/*2.在未排序数组中寻找最值元素,将其然后放到已排序数组的末尾*/
/*3.对所有元素均重复以上步骤,直至最后一个元素*/
/*elemTypearr[]:排序目标数组;intlen:元素个数*/
voidselectionSort(elemTypearr[],intlen){
elemTypetemp;
inti,j,k;
for(i=0;i<len-1;i++){/*外循为排序趟数,len个数进行len-1趟*/
k=i;/*假设当前趟的第一个数为最小值,其下标记在k中(升序为寻找最小值,逆序反之)*/
for(j=i+1;j<len;j++)/*从下一个数到最后一个数之间依次判断*/
if(arr[j]<arr[k])/*若k之后有更小的元素*/
k=j;/*则将其下标记更新至k中*/
if(k!=i){/*若k不为最初的i值,说明在其后找到比其更小的元素*/
temp=arr[k];
arr[k]=arr[i];
arr[i]=temp;
}/*则交换最小值和当前数组第一个元素*/
}
}

/*打印数组*/
/*elemTypearr[]:打印目标数组;intlen:元素个数*/
voidprintArray(elemTypearr[],intlen){
inti;
for(i=0;i<len;i++)
printf("%d ",arr[i]);
putchar(' ');
}

intmain(void){
elemTypearr1[ARR_LEN]={3,5,1,-7,4,9,-6,8,10,4};
elemTypearr2[ARR_LEN]={3,5,1,-7,4,9,-6,8,10,4};
intlen=10;

printf("原始数组1: ");
printArray(arr1,len);
putchar(' ');

printf("冒泡排序: ");
bubbleSort(arr1,len);
printArray(arr1,len);
putchar(' ');

printf("原始数组2: ");
printArray(arr2,len);
putchar(' ');

printf("选择排序: ");
selectionSort(arr2,len);
printArray(arr2,len);

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

‘肆’ 用C语言如何将一个一维数组中的元素随机排序

#include

#include

#include

intmain()

{

inti,j,n,k,t,a[100];

srand((unsigned)time(NULL));

<p

利用rand()函数产生随机数字,rand()%n产生小于n的随机数,然后交换。

运行的结果:

#include

#include

intmain()

{

int&nbs

利用rand()函数产生随机数字,rand()%n产生小于n的随机数,然后交换。

(4)一维数组的排序c语言扩展阅读

C语言排序法

在一层循环找出最小数的下标,该下标用min保存,直到比较完整个数组,即可找到最小的数,然后将该数放入数组的第一位。

这样只能排好一个元素,于是需要再嵌套一层外层循环即可排好所有元素。第二次循环就不用再比较第一个元素了,因为第一个元素已经排好,依次类推,每一次循环就会排好一个,进行n-1次循环即可排好所有元素。

‘伍’ 用C语言对一维数组排序,并输出原来的位置

可以先用冒泡排序对数组进行排序,然后对排序的数组进行遍历,找出其在排序之前数组中的位置,参考代码如下:

#include<stdio.h>
#include<string.h>
#defineN5
intmain()
{
inta[N],b[N],c[N],i,j,temp;
for(i=0;i<N;i++){//输入数组,并用b保存数组a的值
scanf("%d",&a[i]);
b[i]=a[i];
}
for(i=0;i<N-1;i++)//对a从大到小冒泡排序
for(j=0;j<N-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<N;i++)//输出排序后的a
printf("%d",a[i]);
printf(" ");

for(i=0;i<N;i++)//遍历找出以前的位置
for(j=0;j<N;j++){
if(a[i]==b[j])
c[i]=j;
}

for(i=0;i<N;i++)//输出位置数组
printf("%d",c[i]+1);
printf(" ");
return0;
}
/*
运行结果:
38476
87643
24531
*/

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

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

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