码迷,mamicode.com
首页 > 编程语言 > 详细

C语言二分查找与冒泡排序

时间:2019-04-03 20:45:52      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:效率   c语言   循环条件   []   sort   for   break   二分查找   int   

    今天数据结构上机课,老师给了我们几个上个学期做过的C语言题,我惊讶的发现,之前会的算法,时间久了就忘记了,很尴尬,这也充分说明了 我C语言学习功底不够扎实。所以,在课后,我认认真真重新推了一遍,希望下次不会忘记了。

 1 #include<stdio.h>
 2 main()
 3 {
 4     int a[]={2,4,6,8,10,12,14,16,18,20};
 5     int left,right,mid,b;//定义变量
 6     printf("请输入b的值:");
 7     scanf("%d",&b);//输入要查找的值
 8     left=0;//最左端的数组下角标
 9     right=9;//最右边的数组下角标
10     while(left<=right)//循环条件{
11     mid=(left+right)/2;//中间的数组下角标,特别注意 整数除整数得到的 还是整数
12     if(b>a[mid]){
13         left=mid+1;
14                     }
15     else if(b<a[mid]){
16         right=mid-1;
17             }
18         else if(b==a[mid]){
19         printf("查找成功,它位于第%d个",mid+1); break;
20         }     
21     }
22          if(left>right){
23              printf("您输入的值不在此范围内!"); 
24          }
25  } 

 

思路清晰后,在敲代码的过程中,也频频出现问题。例如,第18-19行,运行程序后,当查找成功时,我是没有加“break”语句跳出循环的,导致出现了死循环的状况。

此二分查找方式,在查找之前,应是已经排好序的大大减少了运算的范围,时间复杂度小,提高了效率。

下面是一种比较常用的查找方式,冒泡排序,它有很多种,可以根据自己的习惯与经验来运用。我比较热爱这种冒泡排序 1 #include<stdio 2 #include<string.h>

 3 #define N 10
//定义一个冒泡排序的函数 4 void sort(int a[],int n) 5 {int i,j,t; 6 for(i=0;i<n-1;i++) 7 for(j=0;j<n-i-1;j++) 8 if(a[j]>a[j+1]) 9 { 10 t=a[j];a[j]=a[j+1];a[j+1]=t; 11 }
12 } 13 main(){ 14 int a[N],i; 15 printf("\nEnter %d num:",N); 16 for(i=0;i<N;i++){ 17 scanf("%d",&a[i]); 18 } 19 printf("排序前:"); 20 for(i=0;i<N;i++){ 21 printf("\n"); 22 printf("%4d",*(a+i)); 23 } 24 sort(a,N); 25 printf("\n"); 26 printf("排序后:"); 27 for(i=0;i<N;i++){ 28 printf("\n"); 29 printf("%4d",*(a+i)); 30 } 31 }

当然我们也可以不用特意写函数来实现,可以简单的直接运用冒泡排排序啦。

以上仅为个人的理解,欢迎质疑与评论,嘻嘻

 

C语言二分查找与冒泡排序

标签:效率   c语言   循环条件   []   sort   for   break   二分查找   int   

原文地址:https://www.cnblogs.com/wkx2000/p/10651252.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!