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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

冒泡排序:
#include <stdio.h>
#include <stdlib.h>//生产随机数函数要用
#define N 10    //宏定义
int main(int argc, const char * argv[]) {

    //题目:给数组赋值随机数,并从大到小排序
   
    //定义数组
    int a[N];
    //定义控制变量i
    int i;
    //定义随机数
    int randomNum;
    //for循环对数组进行初始化
    for (i=0; i<N; i++) {
        //产生随机数
        randomNum=arc4random_uniform(50);
        //赋值给数组
        a[i]=randomNum;
        
    }
    //为便于验证已成功赋值 遍历输出数组中的元素
    printf("数组元素为:\n");
    for (i=0; i<N; i++) {
        printf("%d\t",a[i]);
    }
   
    printf("\n");
    //声明排序函数
    void bubbleSort(int a[ ], int n);
   
    int len =sizeof(a)/sizeof(int);//数组长度
    //调用排序函数
    bubbleSort(a, len);//数组作为函数参数传值时传递数组名
    //排序后 遍历输出数组中的元素
    printf("排序后顺序为:\n");
    for (i=0; i<N;i++) {
        printf("%d\t",a[i]);
    }
    printf("\n");
   
    return 0;
}

//定义排序函数
void bubbleSort(int a[ ], int n){//写函数时不要把数组长度写上
    for (int j=0; j<n-1; j++) {//如果有n个数 则遍历n-1趟 所以j从0开始到小于n-1
        for (int i=0; i<n-j-1;i++) {//第j趟有j个数字已经有序 没必要继续比较
                                        // 所以  是n-j-1;
            if (a[i]>a[i+1]) {
                int temp=a[i];
                a[i]=a[i+1];
                a[i+1]=temp;
            }
        }
    }
   
}



选择排序:
#include <stdio.h>
//选择排序 将最小值放在最开始的位置 以打擂台的形式进行
int main(int argc, const char * argv[]) {
   
    int a[7]={45,23,6,2,77,34,74};      //定义一个数组
   
    int len=sizeof(a)/sizeof(int);     //定义数组长度,并赋值
    void xuanZe(int a[],int len);      //声明函数
    xuanZe(a, len);                     //调用函数
    printf("\n");                       // 输出结果后 换行
    return 0;
}
void xuanZe(int a[],int len){            //定义函数时 形参的类型也要注明
    int i,j;                              //定义循环控制变量
   
    for (i=0; i<len-1; i++) {
        for (j=i+1; j<len-1-i; j++) {//用a[i]跟数组中其他的值进行比较
            //在内层循环  只有j++  i不变
            if (a[i]>a[j]) {         //判断a[i]与a[j]谁小 把小的赋值给a[i]
                int temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    for (i=0; i<len; i++) {     //选择排序完成后 遍历数组 输出排序结果
        printf("%d\t",a[i]);
    }
}




折半排序:

#include <stdio.h>
// 0  1  2  3  4
// 2  4  5  7  35
int zheBan(int a[],int key,int len){
    int low=0;                    //定义一个低位
    int high=len-1;                 //定义一个高位
    while (low<=high) {
        
        int mid=(low+high)/2;       //取一个中间位置
        if (a[mid]<key) {      //如果中间位置的值比要查找的值小 则从右区间进行查找
            low=mid+1;        //改变低位的值 更改查找区间
        }else if (a[mid]>key){   //若中间值大于要查找的值,则从左区间进行查找
            high=mid-1;     //改变高位的值  更改查找区间
        }else{
            printf("找到了,a[%d]==%d\n",mid,key);
                            //如果相等 则输出已经找到该数字
            return mid;
        }
    }
    // 0  1  2  3  4
    // 2  4  5  7  35
    printf("没有找到\n");    //当while的条件不再成立时  输出没有找到该数字
    return 0;
}
int main(int argc, const char * argv[]) {
   
    int a[5]={2,4,5,7,35};          //定义一个有序数组(数字由小到大排列)
    zheBan(a, 7, 5);              //调用函数
   
   
    return 0;
}

评分

参与人数 1黑马币 +5 收起 理由
huhanze + 5 很给力!

查看全部评分

11 个回复

倒序浏览
搞点题练练手就好啦
回复 使用道具 举报
努力就有收获
回复 使用道具 举报
冒泡排序以前我也是比较头疼,主要在于调用函数那块没看懂
回复 使用道具 举报
恭喜恭喜!!
回复 使用道具 举报
加油。。。
回复 使用道具 举报
继续努力!!!
回复 使用道具 举报
不错,不错。加油
回复 使用道具 举报
chensc 金牌黑马 2015-7-24 06:28:25
9#
学习学习!
回复 使用道具 举报
加油吧,骚年
回复 使用道具 举报
这三种排序了解了思想以后,自己动手写并且运行正确才是真的
回复 使用道具 举报
每天进步一点点
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马