黑马程序员技术交流社区

标题: 排序 [打印本页]

作者: pirate46    时间: 2015-1-28 18:49
标题: 排序
看了C语言基础视频  对从大到小的排序还不是很会  哪位大神可以指教下?
作者: 仰望的繁华    时间: 2015-1-28 20:17
视频很早就讲了  三种交换变量的方法。

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

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

虽然简单低效,但是做做基础测试题还是差不多的。
作者: pirate46    时间: 2015-1-28 20:31
本帖最后由 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个以上呢?

作者: 水木清华hm    时间: 2015-1-28 20:37
冒泡排序
#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:11
本帖最后由 仰望的繁华 于 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,对比交换。

作者: pirate46    时间: 2015-1-29 13:13
明白了 谢谢
作者: pirate46    时间: 2015-1-29 14:30
水木清华hm 发表于 2015-1-28 20:37
冒泡排序
#include "stdlib.h"
main(){

深奥 需要消化
作者: 水木清华hm    时间: 2015-1-29 18:02
pirate46 发表于 2015-1-29 14:30
深奥 需要消化

慢慢来,不急




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2