A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pirate46 中级黑马   /  2015-1-28 18:49  /  997 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看了C语言基础视频  对从大到小的排序还不是很会  哪位大神可以指教下?

7 个回复

倒序浏览
视频很早就讲了  三种交换变量的方法。

同为菜鸟,我最先开始摸索的排序是这样的:

足球联赛制,两两对比大小,不符合顺序则交换。

虽然简单低效,但是做做基础测试题还是差不多的。
回复 使用道具 举报
本帖最后由 pirate46 于 2015-1-28 20:37 编辑

谢谢 视频确实有讲3种方法  
1.    int temp = a;
    a = b;
    b = temp;
2.     a = b - a;
    b = b - a;
    a = b + a;
3.     a = a ^ b;
    b = a ^ b;
    a = a ^ b;
如果是3个以上呢?
回复 使用道具 举报
冒泡排序
#include "stdlib.h"
main(){
int i;
int j;
int m[]={6,2,7,3,5,8,9,1,4};
int temp;
for(i=7;i>=0;i--){//外层循环,每循环一次找到一个最大值
//循环最大的数
for(j=0;j<=i;j++){//内层循环,帮忙找到最大值
if(m[j+1]<m[j]){
temp=m[j];
m[j]=m[j+1];
m[j+1]=temp;
}
}
}
for(i=0;i<9;i++){
printf("%d,",m[i]);
}
system("pause");
}
main() {
int i,j,temp;
int a[10];
for(i=0;i<10;i++)
scanf ("%d,",&a[i]);
for(j=0;j<=9;j++) {
for (i=0;i<10-j;i++)
if (a[i]>a[i+1]) {
temp=a[i]; a[i]=a[i+1];
a[i+1]=temp;
} }
for(i=1;i<11;i++)
printf("%5d,",a[i] );
printf("\n"); }
回复 使用道具 举报
本帖最后由 仰望的繁华 于 2015-1-29 13:18 编辑
pirate46 发表于 2015-1-28 20:31
谢谢 视频确实有讲3种方法  
1.    int temp = a;
    a = b;

前面已经说了:足球联赛制,一一比较,然后交换。多少个都可以排,缺点是效率比较低,优点是好理解。

比如  i = 0 ,和  i = 1~100 轮流比较交换,这样把最值换到第一位。
然后 i = 1, 和  i =  2~100轮流比较交换,把次最值换到第二位。
.... 继续......
直至 i = 99,和 i = 100,对比交换。
回复 使用道具 举报
明白了 谢谢
回复 使用道具 举报
水木清华hm 发表于 2015-1-28 20:37
冒泡排序
#include "stdlib.h"
main(){

深奥 需要消化
回复 使用道具 举报

慢慢来,不急
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马