㈠ 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语言数组排序
这个不是排序,而是逆序输出,没学过链表用自动增长的栈来实现好了,
只要内存够大,可以输入任意个整数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INC_SIZE 5 /* 每次栈自动增长的大小 */
/* 栈结构 */
typedef struct INTEGER_STACK
{
int* value;
int size; /* 栈大小 */
int pos; /* 栈顶位置 */
} Stack;
/* 初始化栈 */
void initialize(Stack* s)
{
if (s->size <= 0)
s->size = INC_SIZE;
s->value = (int*)malloc(sizeof(int) * s->size); /* TODO: error check */
s->pos = -1;
}
/* 销毁 */
void destroy(Stack* s)
{
free(s->value);
s->value = NULL;
s->size = 0;
}
/* 扩充栈 */
void expand(Stack* s, int new_size)
{
if (new_size > s->size)
{
s->value = (int*)realloc(s->value, sizeof(int) * new_size); /* TODO: error check */
s->size = new_size;
}
}
/* 入栈 */
void push(Stack* s, int i)
{
if (s->pos >= s->size - 1)
expand(s, s->size + INC_SIZE);
s->value[++(s->pos)] = i;
}
/* 出栈 */
int* pop(Stack* s)
{
if (s->pos >= 0)
return &(s->value[s->pos--]);
else
return NULL;
}
/* 是否为空栈 */
int is_empty(Stack* s)
{
return s->pos < 0;
}
/* 测试程序 */
int main()
{
Stack stack;
stack.size = 5;
initialize(&stack);
/* 输入数组 */
printf("输入整数数组,每行一个整数, 用 end 结束:\n");
while (1)
{
char buf[128];
scanf("%s", buf);
if (strcmp(buf, "end") == 0)
break;
else
push(&stack, atoi(buf));
}
printf("\n");
/* 逆序输出 */
do
{
int* i = pop(&stack);
if (i == NULL)
break;
printf("%d", *i);
if (!is_empty(&stack))
printf(" ");
}
while (1);
destroy(&stack);
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;
}
程序运行结果如下:
(3)大一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;
}
㈣ 求C语言将数组元素大小排序!!
#include <stdio.h>
int main(){
int numbers[10] = { 10,2,3,4,5,6,9,8,7,1 };
int a,b, text, hello;
for(a=0; a<10-1; a=a+1) { //在这里进行比较的开始的代码
hello = 1; //假如剩下的元素已经被排序好了,然后接着进行下面的比较
for(b=0; b<10-1-i; b=b+1){
if(numbers[b] > numbers[b+1]){
text= numbers[b];
numbers[b] = numbers[b+1];
numbers[b+1] = text;
hello= 0;
}
}
if(hello) break;
}
for(a=0; a<10; a=a+1){
printf("%d ", numbers[a]);
}
printf(" ");
return 0;
}
(4)大一c语言数组排序的例子扩展阅读:
C语言中数组元素大小的相关排序规则:
一、首先需要对数组中的元素进行排列,默认是以字符串的规则进行从小到大排序;可接收一个参数:自定义的规则相关排序。参数的具体要求如下:
1、参数首先必须是一个函数;
2、函数必须有一个明确的返回值;
3、返回值必须是number类型,但不可以是NaN。
二、排序中的具体规则:
1、首先每次从数组中挑选出两个元素传入函数中,进行比较,直到所有进行排列的元素都被挑选完毕以后就不要再进行挑选;
2、如果返回值是一个正数,就交换这彼此的位置,实现大小的正确排列;
3、如果返回值是一个负数或0,此时说明大小位置的顺序是正确的,此时就不需要交换彼此的位置。
4、默认同一字符的全角字符看做半角字符。不区分同一个字符(如日文的片假字)的半角与全角状态。相同元素,维持原序,默认区分字母大小写,同一个字符小写在前,大写在后。
注意:对数组的元素进行排序需要不断比较两个数字的大小,10个元素排序一共需要比较9次,直到所有的元素被都完完全全地被比较一次。
㈤ C语言,数组排序
min=i; //假设i是最小的
for(j=i+1;j<=8;j++) //遍历i之后的元素
if(a[min]>a[j]) //还有比a[i]小的元素?
min=j; //有,记住这个元素的编号
temp=a[i]; //下面3行,交换最小的元素和第i个元素,使a[i]是最小的
a[i]=a[min]; //这里你可以判断一下,如果min==i就不用交换。
a[min]=temp;
㈥ c语言编程: 将一组数按从大到小的顺序排序
#include <stdio.h>
main()
{
int x;
printf("请输入要排序数字个数:");
scanf("%d",&x);
int i,j,k,a,b,num[x];
printf("输入数据:");
for(i=0;i<x;i++)
scanf("%d",&num[i]);
for(j=0;j<x;j++)
{
for(k=j+1;k<x;k++)
if(num[k]>num[j])
{
a=num[j];
num[j]=num[k];
num[k]=a;
}
}
for(b=0;b<x;b++)
printf("%d ",num[b]);
return 0;
}
(6)大一c语言数组排序的例子扩展阅读:
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:
#include<math.h>//一些数学函数的原型,以及相关的类型和宏
如果需要包含针对程序所开发的源文件,则应该使用第二种格式。
采用#include命令所插入的文件,通常文件扩展名是.h,文件包括函数原型、宏定义和类型定义。只要使用#include命令,这些定义就可被任何源文件使用。
㈦ C语言中如何从大到小排列一个数组中的元素
先找不是0的元素个数
然后对前面部分进行排序即可。
函数如下
voidmy_sort(int*a)
{
intn,i,j;
intt;
for(n=0;a[n];n++);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
自己写主函数 调用my_sort就好了。
㈧ C语言(数组排序)
1.选择排序思想:假定按从大到小排序,比较数组中所有数的大小,挑出最大的元素将其与第一个元素交换位置,然后比较除第一个元素外其他各元素的大小,挑出最大的元素与第二个元素交换位置,依此类推,完成排序。
2.给你解释开头的n-2:k=0 to k=n-2,k总共取n-1个元素,当k=n-2时,对应a[n-2]为数组倒数第二个元素,此时i=n-i,a[i]即a[n-1]对应数组最后一个元素,当比较完a[n-2]和a[n-1]并排序后,整个数组就完成了排列。
3.代码:
for(k=0;k<=n-2;k++)
{
index=k;
for(i=k+1;i<=n-1;i++)
{
if(a[i]<a[index])
{
index=i;
}
}
temp=a[k],a[k]=a[index],a[index]=temp;
}
㈨ 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语言)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intmain(void)
{
inta[10],i,j,tmp,b;
srand(time(NULL));
for(i=0;i<10;i++)
a[i]=rand()%100;
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf(" ");
for(i=0;i<9;i++)
{
tmp=i;
for(j=i+1;j<10;j++)
{
if(a[tmp]>a[j])
tmp=j;
}
if(i!=tmp)
{
b=a[tmp];
a[tmp]=a[i];
a[i]=b;
}
}
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf(" ");
return0;
}
随机产生数组中的元素, 更合理一些。 网络中有各种版本。