c语言数组从小到大排序排序

c语言:编写冒泡排序,排序一个整形数组(从小到大)
程序:不妨按从小到大排序
#include &stdio.h&
int main ()
&int a[10];
&int i = 0;
&int j = 0;
&int t = 0;
&printf (&input 10 numbers:&);
&for ( i = 0; i & 10; i++)
& scanf (&%d&,&a[i]);
&for (i = 0; i & 9; i++)
& for ( j = 0; j & 9 - j++)
& &if (a[j] & a[j+1])
& & t = a[j];
& & a[j] = a[j+1];
& & a[j+1] =
&printf (&the sorted numbers:\n&);
&//&the sorted numbers&表示排序的数字
&for (i =0; i & 10; i++)
& printf (&%d\t&, a[i]);
&printf (&\n&);
&return 0;
输出结果:
input 10 numbers:11 2 3 5 34 6 78 9 12 62
the sorted numbers:
2 & & & 3 & & & 5 & & & 6 & & & 9 & & & 11 & & &12 & & &34 & & &62 & & &78C语言 数组实现冒泡排序和选择排序程序 - 简书
C语言 数组实现冒泡排序和选择排序程序
冒泡排序:
冒泡排序的的优点是好理解,稳定,再就是空间复杂度低,不需要额外开辟数组元素的临时保存控件,当然了,编写起来也容易。
其算法很简单,就是比较数组相邻的两个值,把大的像泡泡一样“冒”到数组后面去,一共要执行N的平方除以2这么多次的比较和交换的操作(N为数组元素),其复杂度为Ο(n?),如图:
266CD4AF--96A7-ED25AAE9C6AA.png
for(k=0;k&5;k++)
scanf("%d",&a[k]);
for (i=0;i&5;i++)
for (j=0;j&5-i;j++)
if (a[j]&a[j+1])
temp=a[j+1];
a[j+1]=a[j];
for (i=0;i&5;i++)
printf("%d ",a[i]);
选择排序:
自己能够想得出来的排序法,思路很简单,用打擂台的方式,找出最大的一个元素,和末尾的元素交换,然后再从头开始,查找第1 个到第N-1 个元素中最大的一个,和第N-1 个元素交换……其实差不多就是冒泡法的思想,但整个过程中需要移动的元素比冒泡法要少,因此性能是比冒泡法优秀的。看图:
F1E-C62C3DC473E.png
void select_sort(int a[],int len)
int i,j,x,l;
for(i=0;i&i++)
for(j=i;j&j++)
if(a[j]&x)
a[l]=a[i];
最早拥有排序概念的机器出现在 1901 至 1904 年间由 Hollerith 发明出使用基数排序法的分类机,此机器系统包括打孔,制表等功能,1908 年分类机第一次应用于人口普查,并且在两年内完成了所有的普查数据和归档。Hollerith 在 1896 年创立的分类机公...
本篇有7k+字, 系统梳理了js中排序算法相关的知识, 希望您能喜欢. 原文:JS中可能用得到的全部的排序算法 导读 排序算法可以称得上是我的盲点, 曾几何时当我知道Chrome的Array.prototype.sort使用了快速排序时, 我的内心是奔溃的(啥是快排, 我只...
插入排序 特点stable sort,In-place sort基于比较 基本思想每次选择一个元素 K 插入到之前已排好序的部分 A[1…i]中,插入过程中 K 依次由后向前与 A[1…i]中的元素进行比较。若发现发现 A[x]&=K,则将 K 插入到 A[x]的后面,插入...
数据结构与算法--排序之冒泡、选择、插入、希尔 我们关注的主要对象是重新排列数组元素的算法,每个元素都有一个主键,排序算法的目的是将所有元素按照某种方式排列,排列后索引大的元素的主键大于等于索引小的元素的主键。元素和主键在不同的应用中可能各不相同,在Java中元素通常都是对...
[TOC] Class I. Words Expressing Abstract Relations Section I. Existence 1. Being, in The Abstract existence 1 absolute
a.绝对的,完全的; 无(条件...
安住在喜悦之中,而不是更优秀。慢慢来,感受轻而易举的富足。【感恩/喜悦/嘉许】 1.我做到22:30前入睡4天星期日21:34最早 星期二23:19最晚 一周跑量:20.61㎞每日平均步数:11379.3㎞ 3.我做到专注陪伴孩子。 4.我不忘感恩父母和贵人。 5.我拥有懂...
在2017年Google I/O上,Google宣布Android支持Kotlin作为官方开发语言同步在官网上线了Kotlin的入门级文档 Kotlin and Android Kotlin与Java兼容,可以混合式的编码 If you're interested in u...
除了晒黑,没怎么摸过车的学员们曾经无数次被教练们讽刺和“虐待”…… @抱着萝莉的御姐:练传说中最简单的直角转弯的时候把驾校训练场的墙撞塌了…… @犊子不会滚: 练:看到前面那个人了吗?撞死他。 我:不敢。 练:不敢还不松油门。 @每朵云都下落不明live:教练说,我觉得你会...
-1- 看电影《团圆》时,非常让我感动的一点是:这么多年过去了,她还是他的的小女孩。 当年国民党溃败,情侣陈燕生和乔玉娥约好在码头碰面,一起坐船去台湾,可是人山人海,他们找不到彼此,陈燕生挤上小船逃向台湾,而乔玉娥却留在了上海。 她身怀六甲孤苦无依,作为国民党遗属生活更是难...
Ras-Node(Aero-Node) 使用树莓派控制小车或者无人机,同时树莓派通过无线自组织网络的方式连接起来,并实现数据的传输。 项目结构 编译工具:CMake 项目管理:git 文档生成:Doxygen 日志记录:log4cpp 用户界面:QtC语言 数组元素大小排序_百度知道
C语言 数组元素大小排序
通过程序实现的功能:
譬如输入一个数组{1,4,2,3,9,6,5,8,7}
最终输出结果为{9,1,8,2,7,3,6,4,5}
下面这个有误,求改,或者另外写一个也行
#include &stdio.h&
# define N 100
void fun(int *a,int n)
int i,j,max,min,px,pn,t;
for(i=0;i&n-1...
我有更好的答案
这里先直接给个从大到小排列的代码吧::#include&&stdio.h&#&define&N&100void&main(){ int&buff[N]; int&i,j,numN,//输入: printf(&Please&input&an&array:&&); for(i=0;i&N;i++) {
scanf(&%4d&,&buff[i]);
numN=i+1;//输入个数
if(getchar()=='\n') }//显示输入数组: printf(&\nThe&original&array&is:&&); for(i=0;i&numN;i++)
printf(&%d&&,buff[i]);
}//排序: for(i=0;i&numN-1;i++) {
for(j=i+1;j&numN;j++)
if(buff[i]&buff[j])//如果前者小于后者&则交换
temp=buff[i];
buff[i]=buff[j];
} }//排序后输出: printf(&\n\nThe&result&is:&&); for(i=0;i&numN;i++) {
printf(&%d&&,buff[i]); } if(getchar()=='\n');//暂停一下&enter键继续}希望对你有所帮助
采纳率:100%
#include &stdio.h&# define N 100void fun(int *a,int n){int i,j,max,min,px,pn,t; &for(i=0;i&n-1;i+=2) & & &{& max=min=a[i];& px=pn=i;for(j=i+1;j&n;j++){&if(max&a[j])&{max=a[j];px=j;}&if(min&a[j])&{min=a[j];pn=j;}}if(px!=i){&t=a[i];a[i]=a[px]=t;&if(pn==i)pn=}if(pn!=i+1){t=a[i+1];a[i+1]=a[pn]=t;}}}int main(){int b[N]={1,4,2,3,9,6,5,8,7};int i,u,k;u=9;printf(&the original array is:\n&);for(k=0;k&u;k++)printf(&%4d&,b[k]);printf(&\n&);fun(b,u);printf(&\nthe result is:\n&);for(k=0;k&u;k++)printf(&%4d&,b[k]);return 0;}
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C语言数组五种排序法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言数组五种排序法
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩1页未读,
定制HR最喜欢的简历
你可能喜欢几种常见排序算法原理&C语言实现 - gnosed_coding - 博客园
First or best
一、冒泡排序(以下各法均以从小到大排序为例,定义len为数组array的长度)
原理:比较相邻元素的大小,对于每次循环,按排序的规则把最值移向数组的一端,同时循环次数依次减少。
void bubble_sort(int arr[],int len)//从数组头部开始,某一个元素与其后面的每个元素作比较
int i,j,t;
for(i=<span style="color: #;i&len-<span style="color: #;i++)
for(j=i+<span style="color: #;j&j++)
if(arr[i]&arr[j])
t=arr[i];arr[i]=arr[j];arr[j]=t;
void bubble_sort(int arr[],int len)//从数组的头部开始,相邻元素之间作比较
int i,j,t;
for(i=<span style="color: #;i&len-<span style="color: #;i++)
for(j=<span style="color: #;j&len-<span style="color: #-i;j++)
if(arr[j]&arr[j+<span style="color: #])
t=arr[j];arr[j]=arr[j+<span style="color: #];arr[j+<span style="color: #]=t;
void&bubble_sort(int arr[],int len)//从数组的结尾开始返回,相邻元素之间作比较
int i,j,t;
for(i=<span style="color: #;i&i++)
for(j=len-<span style="color: #;j&i;j--)
if(arr[j-<span style="color: #]&arr[j])
t=arr[j];arr[j]=arr[j-<span style="color: #];arr[j-<span style="color: #]=t;
二、选择排序
1.原理:先在未排序的数组中找出最值,通过交换将其放在数组第一位,然后再从剩余的未排序数组中找到另一个最值,将其放在已排序数组的末尾(第二次找到该最值后将其放在数组第二位)。以此类推,直到整个数组排完序。
2.C代码实现
void select_sort(int arr[],int len)
int i,j,t,k;
for(i=<span style="color: #;i&len-<span style="color: #;i++)
for(j=i+<span style="color: #;j&j++)
if(arr[k]&arr[j])//找最小值
t=arr[i];arr[i]=arr[k];arr[k]=t;
三、插入排序(此处为直接插入排序,另外还有二分插入、链表插入等排序)
1.原理:将数据分为有序数列和无序数列两部分,一开始有序数列只有数列的第一个元素。对于无序数列的每个元素,要插入到有序数列中,方法是与有序数列中的末尾元素开始作比较,若前者大于后者则前者位置不变;否则,检索这个待插入元素小于第n个元素且大于或等于第n-1个元素的位置,同时将这个位置后面的元素往后移动(检索一次,移动一次),然后将其插入到这个位置。以此类推,直到无序数列元素个数为0。
2.C代码实现
void insert_sort(int arr[],int len)
int i,j,k;
for(i=<span style="color: #;i&=i++)
j=i-<span style="color: #;
while(j&-<span style="color: #&&k&arr[j])
arr[j+<span style="color: #]=arr[j];
arr[j+<span style="color: #]=k;
四、快速排序
首先选取未排序数组的第一个数作为关键数据,然后,将所有比它小的数都放到它前面,将所有比它大的数都放到它后面,这个过程称为一趟快速排序。然后再对前后这两个数组进行类似排序,直到整个数组排好序。不难看出,这里最好采用到递归。具体算法步骤参见http://developer.51cto.com/art/986.htm
2.C代码实现
void quick_sort(int ary[],int left,int right)
int i=left,j=right,k=ary[left],t;//k储存准基数
while(i!=j)
while(i&j&&ary[j]&=k)//必须是先从右边比较,否则准基数归位时将出错
while(i&j&&ary[i]&=k)
t=ary[i];ary[i]=ary[j];ary[j]=t;
ary[left]=ary[i];
quick_sort(ary,left,i-<span style="color: #);
quick_sort(ary,i+<span style="color: #,right);
五、归并排序
1.原理:归并排序采用递归实现,总体上有两个步骤(分解与归并):
先将待排序数组R[0...n-1]分解成n个长度为1的有序序列(其实是一个元素),将相邻的两个元素有序归并,得到n/2个长度为2的有序序列;然后将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列。
归并的具体步骤:比较arr[i]和arr[j],将较小值复制到新的数组new_arr[k],同时让i,j都加上1。如此循环下去,直到其中一个数组被复制完,再让另一个数组所剩余的元素(已排序)直接拼接到的new_arr的后面。
2.C代码实现
void merge_sort2(int arr[],int new_arr[],int left,int right,int mid)
int i=left,j=mid+<span style="color: #,k=
while(i!=mid+<span style="color: #&&j!=right+<span style="color: #)//归并
if(arr[i]&arr[j])
new_arr[k++]=arr[j++];
new_arr[k++]=arr[i++];
while(i!=mid+<span style="color: #)
new_arr[k++]=arr[i++];
while(j!=right+<span style="color: #)
new_arr[k++]=arr[j++];
for(i=i&=i++)
arr[i]=new_arr[i];
void merge_sort1(int arr[],int new_arr[],int left,int right)
if(left&right)
mid=(left+right)/<span style="color: #;
merge_sort1(arr,new_arr,left,mid);//左分解
merge_sort1(arr,new_arr,mid+<span style="color: #,right);//右分解
merge_sort2(arr,new_arr,left,right,mid);//调用子函数归并

我要回帖

更多关于 c语言数组 的文章

 

随机推荐