1. 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();//输出排序后的成绩和相应的学号。
void jsSort();
ReadDat();
printf("*********************************\n");
printf("初始成绩单为:\n");
WriteDat();
jsSort();
printf("*********************************\n");
printf("排序后成绩单为:\n");
WriteDat();
return ;
}
void ReadDat()
{
srand(time(NULL));//随机数种子
for(int i=0;i<100;i++)
{
aa[i]=1+(int)(100.0*rand()/(RAND_MAX+1.0));//产生随机数
}
for(i=0;i<100;i++)
{
bb[i]=1+(int)(100.0*rand()/(RAND_MAX+1.0));//产生随机数
}
}
void WriteDat()
{
int i;
printf("序号\t成绩: \t学号: \n");
for(i=0;i<100;i++)
printf("%d\t成绩:%3d\t学号:%d\n",i+1,aa[i],bb[i]);
}
void jsSort()
{
int i,j,t;
for(i=0;i<99;i++)
for(j=0;j<99-i;j++)
{
if(aa[j]<aa[j+1])
{
t=aa[j];///////////冒泡排序,同时调整对应的学号数组bb
aa[j]=aa[j+1];
aa[j+1]=t;
t=bb[j];
bb[j]=bb[j+1];
bb[j+1]=t;
}
}
}
2. 输入一组整数对该序列进行简单选择和归并排序(数据结构用c语言写啊)
给你一个归并排序的具体算法和分析:
两路归并排序算法思路:
①.
把n个记录看成n个长度为l的有序子表
;
②.
进行两两归并使记录关键字有序,得到n/2个长度为2的有序子表;
③.
重复第②步直到所有记录归并成一个长度为n的有序表为止;
具体算法:
//
归并操作
template
static
void
merge
(typearray[],
int
p,
int
q,
int
r){
int
i
,
k
;
int
begin1
,
end1
,
begin2
,
end2
;
int*
temp
=
(int*)malloc((r-p)*sizeof(int))
;
begin1
=
p
;
end1
=
q
;
begin2
=
q+1
;
end2
=
r
;
k
=
0
;
while
(begin1
<=
end1
&&
begin2
<=
end2){
if
(array[begin1]
<
array[begin2]){
temp[k]
=
array[begin1]
;
begin1
++
;
}
else{
temp[k]
=
array[begin2]
;
begin2
++
;
}
k
++
;
}
while
(begin1
<
end1)
temp[k++]
=
array[begin1++]
;
while
(begin2
<
end2)
temp[k++]
=
array[begin2++]
;
for
(i
=
0
;
i
<
(r-p)
;
i
++)
array[p+i]
=
temp
;
free(temp)
;
}
//--------------------------------------------------------------------------------
template
void
mergesort(typearray[],
unsigned
int
first,
unsigned
int
last){
int
mid
=
0
;
if
(first
<
last)
{
mid
=
(first+last)/2
;
mergesort
(array,
first,
mid)
;
mergesort
(array,
mid+1,
last)
;
merge
(array,
first,
mid,
last)
;
}
}
3. c语言编程: 将一组数按从大到小的顺序排序
以下是输入10个整数按从大到小排序后再插入一个整数的程序。
#include <stdio.h>
int main(void)
{
int i,j,temp,sz[50];
for(i=0;i<10;i++)
{
printf(" 请输入第 %d 个整数:",i+1);
scanf("%d",&sz[i]);
}
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(sz[i]<sz[j])
{
temp=sz[i];
sz[i]=sz[j];
sz[j]=temp;
}
printf(" 10个整数按从大到小排序:");
for(i=0;i<10;i++)
printf(" %d",sz[i]);
printf("
请输入需要插入的整数:");
scanf("%d",&temp);
j=10;
for(i=9;i>=0;i--)
if(temp>sz[i])
j--;
if(10-j>0)
for(i=9;i>j-1;i--)
sz[i+1]=sz[i];
sz[j]=temp;
printf(" 插入整数 %d 后的数组:",temp);
for(i=0;i<11;i++)
printf(" %d",sz[i]);
return 0;
}
4. C语言 数组与函数 写一函数,对输入的一组整数按由小到大的顺序排序,在main主函数调用该
#include<stdio.h>
voidbsort(inta[],intn)//a输入的数组,n是数组长度
{
inti,j,k;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i;j++)
if(a[j]>a[j+1])
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
intmain()
{
inta[1000],n;
scanf("%d",&n);
inti;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
bsort(a,n);
for(i=0;i<n;i++)
printf("%d",a[i]);
return0;
}
5. C语言 用冒泡排序法将一组整数(存在于数组中)按照从小到大排列
void sort(int a[],int size)
{
int tmp;
int i,j;
for(i=0;i<size;i++)
for(j=0;j<size-i;j++)
{
if(a[j]<a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
6. 编写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;
}
程序运行结果如下:
(6)一个整数组按顺序排列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;
}
7. 用c语言编程:键盘上输入N个整数,使该数组中的数按照从小到大的次序排列(选择法排序)
#include "stdio.h"
#define N 10
int main(int argc,char *argv[]){
int a[N],i,j,k;
printf("Please enter %d integer(s)... ",N);
for(i=0;i<N;scanf("%d",a+i++));//输入
for(i=0;i<N;i++){//选择法排序
for(k=i,j=k+1;j<N;j++)
if(a[k]>a[j])
k=j;
if(k!=i)
j=a[k],a[k]=a[i],a[i]=j;
printf("%d ",a[i]);
}
printf(" ");
return 0;
}
代码图片和运行样例:
8. C语言:用选择排序法对一个数组里的数进行排序,从小到大,要求选出小的进行排序
#include<stdio.h>
intmain()
{
inti=0;
inta[10]={0,5,2,3,6,9,8,7,4,1};
intj=0;
inttmp=0;
intm=sizeof(a)/sizeof(a[0]);//s数组大小
for(i=0;i<m-1;i++)//比较m-1次
{
for(j=0;j<m-i-1;j++)//最后一次比较a[m-i-1]与a[m-i-2]
{
if(a[j]>a[j+1])//如果a[j]比a[j+1]大则交换内容
{
tmp=a[j+1];
a[j+1]=a[j];
a[j]=tmp;
}
}
}
for(i=0;i<m;i++)
{
printf("%d",a[i]);//打印
}
printf(" ");
return0;
}
(8)一个整数组按顺序排列c语言扩展阅读
C语言排序法
把一个数组进行排序可以使用选择排序法。选择排序法的原理在是每一趟循环寻找数组中最小的数的下标,然后按照递增的顺序放入数组中。
循环找出最小数的下标,该下标用min保存,直到比较完整个数组,即可找到最小的数,然后将该数放入数组的第一位,这样就排好了一个元素。
需要再嵌套一层外层循环即可排好所有元素。第二次循环就不用再比较第一个元素了,因为第一个元素已经排好,依次类推,每一次循环就会排好一个,进行n-1次循环即可排好所有元素。
9. 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]);
}
10. C语言设计程序输入一组整数由小到大排序
#include<stdio.h>
#define max 100
void main()
{
int a[max],j,i,k=0,t=0,n=0;
printf("Please input N: "); /*输入要处理元素的个数*/
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*比较n-1遍*/
{ k=i;
for(j=i+1;j<n;j++) /*每遍比较n-(i+1)次*/
if(a[k]>a[j])
k=j;
if(k!=i) /*元素排序前下标与排序后下标不符,则交换其值*/
{ t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("\n\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
}