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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fanyafangxf 中级黑马   /  2015-11-3 22:13  /  471 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.冒泡排序:相邻的数比较,大的数放后面,每趟取得最大的数放在最后
  1. #include<stdio.h>
  2. int main(int argc, const char * argv[]) {
  3.     //定义一个字符数组
  4.     int a[10]={22,34,5,45,51,62,66,44,32,31};
  5.     int temp;
  6.     for(int i=0;i<10-1;i++){
  7.         for(int j=0;j<10-1-i;j++){
  8.             if(a[j]>a[j+1]){
  9.                 temp=a[j];
  10.                 a[j]=a[j+1];
  11.                 a[j+1]=temp;
  12.             }
  13.         }
  14.     }
  15.     for (int i=0;i<10;i++){
  16.         printf("%d\t",a[i]);
  17.     }
  18.     return 0;
  19. }
复制代码
2.选择排序:每一个数跟后面的数比较,小的放到当前位置
  1. #include<stdio.h>
  2. int main(int argc, const char * argv[]) {
  3.     //定义一个字符数组
  4.     int a[10]={22,34,5,45,51,62,66,44,32,31};
  5.     int temp;
  6.     for(int i=0;i<10;i++){
  7.         for(int j=i+1;j<10;j++){
  8.             if(a[i]>a[j]){
  9.                 temp=a[j];
  10.                 a[j]=a[i];
  11.                 a[i]=temp;
  12.             }
  13.         }
  14.     }
  15.     for (int i=0;i<10;i++){
  16.         printf("%d\t",a[i]);
  17.     }
  18.     return 0;
  19. }
复制代码
第二种方式:
  1. #include<stdio.h>
  2. int main(int argc, const char * argv[]) {
  3.     //定义一个字符数组
  4.     int a[10]={22,34,5,45,51,62,66,44,32,31};
  5.     int min;
  6.     int temp;
  7.     for(int i=0;i<10;i++){
  8.         min=i;//假设每次最小元素的下标是i;
  9.         for(int j=i+1;j<10;j++){
  10.             if(a[min]>a[j]){
  11.                 min=j;//找到最小元素的下标
  12.             }
  13.         }
  14.         if(i!=min){//如果i=min不用交换,否则交换
  15.             temp=a[min];
  16.             a[min]=a[i];
  17.             a[i]=temp;

  18.         }
  19.     }
  20.     for (int i=0;i<10;i++){
  21.         printf("%d\t",a[i]);
  22.     }
  23.     return 0;
  24. }
复制代码
3.折半查找:在有序数组中查找一个值,思路:设置一个low=0;higt=length-1找中间的元素mid=(low+high)/2跟key值比较,如果key值>mid的值,high=mid-1,如果key值大于mid,那么low=mid+1;继续查找,直到相等
  1. //折半查找
  2.     int key=51;
  3.     int low=0,high=10-1;
  4.     int mid=0;
  5.    
  6.     while(low<=high){
  7.         mid=(low+high)/2;
  8.         if(key<a[mid]){
  9.             high=mid-1;
  10.         }else if(key>a[mid]){
  11.             low=mid+1;
  12.         }else{
  13.             printf("找到了%d",mid);
  14.             break;
  15.         }
  16.     }
复制代码
如果要插入一个数到有序数组中,那么返回的下标应该是low(查找不到的话,low的值比high的值大)


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马