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