冒泡排序: 
#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; 
} 
 |