数组排序c语言
Ⅰ 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语言数组排序方法
选择排序的原理是,每次从待排序数字中挑选出最大(最小)数字,放在有序序列的末尾。实际操作中,只需要在这个数组中将挑出来的数字与前面的数字交换即可。例如: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语言考试。问数组,常见的数组排序算法有那几种选择一个描述过程。
有插入排序:直接插入排序、折半插入排序、希尔排序;交换排序:冒泡排序、快速排序;选择排序:简单选择排序、堆排序;归并排序;基数排序。
常用冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面(数组由小到大排序)。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后,此时第一趟结束,在最后的数必是所有数中的最大数。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,
j的值依次为1,2,...10-i。
代码:
for(i=0;
i<NUM-1;
i++)
/*外循环:控制比较趟数*/
for(j=NUM-1;
j>i;
j--)
/*内循环:进行每趟比较*/
if(data[j]<data[j-1])
/*如果data[j]大于data[j-1],交换两者的位置*/
{temp=data[j];
data[j]=data[j-1];
data[j-1]=temp;
};
Ⅳ C语言数组排序
#defineN9
inta[N*N];
intshow(intk){inti,j,m,n;
m=k/N;n=k%N;
for(i=0;i<N;i++)printf("%02d",a[m*N+i]);printf(" ");
for(i=0;i<N;i++){
for(j=0;j<n;j++)printf("");
printf("%02d ",a[n+i*N]);
}
if(m==0)m++;elseif(m==8)m--;
if(n==0)n++;elseif(n==8)n--;
for(i=0;i<N/3;i++){
for(j=0;j<N/3;j++)printf("%02d",a[(m-1+i)*N+n-1+j]);
printf(" ");
}
return0;
}
intshow1(intk){inti,j,mm,nn;
mm=k/N;nn=k%N;
if(mm==0)mm++;elseif(mm==8)mm--;
if(nn==0)nn++;elseif(nn==8)nn--;
for(i=0;i<N;i++){
for(j=0;j<N;j++)
if(i==mm||j==nn||(i>=mm-1&&i<=mm+1&&j>=nn-1&&j<=nn+1))
printf("%02d",a[i*N+j]);
elseprintf("");
printf(" ");
}
return0;
}
voidmain(){inti,n;
for(i=0;i<N*N;i++)a[i]=i;
scanf("%d",&n);show(n);printf(" ------------------------------ ");show1(n);
运行结果中横线前面按题目打印,后面更直观
Ⅳ 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语言数组排序中的选择法是什么意思啊
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中 选出 最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。所以这种排序的方法叫选择法排序。
C语言参考实例:
#include<stdio.h>
voidmain()
{
inta[]={1,3,4,2,0};
inti,j,n=5;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)//每一遍都与当前a[i]比较
if(a[i]<a[j])//大的前移
{
intt=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<n;i++)
printf("%d",a[i]);
}
Ⅶ c语言将数组从小到大排序
有些简单的东西不用指针,用了有时反而会错
这是我以前写的
#include<stdio.h>
intmain()
{
inti,j,x[100],y=0,a;
printf("请输入数字数量: ");
scanf("%d",&a);
printf("请输入各个数字: ");
for(i=0;i<a;i++)
{
scanf("%d",&x[i]);
}
printf(" ");
//输入
for(j=1;j<=(a-1);j++)
{
for(i=0;i<(a-j);i++)
{
if(x[i]<x[(i+1)])
{
y=x[(i+1)];
x[(i+1)]=x[i];
x[i]=y;
}
}
}
//冒泡排序
for(i=(a-1);i>=0;i--)
{
printf("%d<",x[i]);
}
printf(" ");
for(i=0;i<a;i++)
{
printf("%d>",x[i]);
}
printf("");
//输出
return0;
}
Ⅷ c语言数组排序
你输入的时候就不可能通过,怎么可能存在a[3]啊,只能输入3个数字,否则越界了。简单的排序有冒泡,选择,基数,归并,希尔,插入,还有堆排序。
Ⅸ 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语言编写函数,数组排序
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;
}
(10)数组排序c语言扩展阅读:
printf函数使用注意事项
1、域宽
%d:按整型数据的实际长度输出。
如果想输出指定宽度可以指定域宽,%md-->m域宽,打印出来以后,在控制台上,显示m位;
如果要打印的数的位数如果超过我们设定m则原样输出;
如果要打印的数的位数如果小于设定的位数,则补空白,具体如下:
如果m为正数,则左对齐(左侧补空白);
如果m为负数,则右对齐(右侧补空白)。
2、转义字符
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。
如:printf("%f%%",1.0/3);输出结果:0.333333%。