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

今天数据结构上机课,老师给了我们几个上个学期做过的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 }

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

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

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

时间: 2024-10-25 00:52:51

C语言二分查找与冒泡排序的相关文章

python实现二分查找与冒泡排序

二分查找,代码如下: def binarySearch(l, t): low, high = 0, len(l) - 1 while low < high: 'print low, high' mid = (low + high) / 2 if l[mid] > t: high = mid elif l[mid] < t: low = mid + 1 else: return mid return low if l[low] == t else False 冒泡排序代码如下: def b

二分查找法 冒泡排序法

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好; 其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表. 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功; 否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表. 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功. 二分查找

python常用的简单算法,二分查找、冒泡排序、数组翻转等

1.二分查找:主要用于查询元素数量较多的列表,采用二分查找,取中位值,进行大小比较,可以提高效率 1 #二分查找,用于在较大的数据列表中查询某个值,考虑到元素比较多,单纯的遍历会造成内存压力过大,考虑使用二分查找 2 #二分查找的关键在于查询中间值,将需要查找的值与中间值进行比较,然后确定查找方向 3 def binary_search(data_source,find_n): 4 #取中位数 5 mid=int(len(data_source)/2) 6 7 if len(data_sourc

(经典) K&amp;R的名著&lt;&lt;C程序设计语言&gt;&gt;二分查找

#include<stdio.h> //查找成功则返回所在下标否则返回-1 int binsearch(int A[], int n,int a) { int low, high, mid; low = 0; high = n -1; while ( low <= high) { /// 这里必须是 <= mid = (low+high) / 2; if (A[mid] == a) return mid; else if(A[mid]<a) low = mid +1; els

C语言二分查找

#include <stdio.h> /* 二分查找条件: 1.有序序列 2.数据在数组中 */ int baseBinarySearch(int a[],int h,int k) { int low=0; int high=h; int mid =0; int NoFound = -1; while (low <= high) { mid = low + (high-low) /2 ; if ( k < a[mid] ) { high = mid - 1; } else if (

C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)

C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆) 虽然直接插入排序,冒泡排序以及二分查找是算法中最为基础以及老掉牙的话题,但作为一名算法的深爱者,有时候无聊时候总会将这些简单的话题重新理解并敲写一番,目的只是为了得到理解娴熟的程度.而且,我觉得越是简单基础的东西,有时候更应该反复的去敲写,深化它,并最终让其中的思想内化为自己的一部分.待到他日一提起之时,会相当娴熟的"刷刷刷..."几分钟搞定,那就很有成就感了! 因为我喜欢对于一个问题进行实例的剖析,进而再转化为特有的用某种

选择排序、冒泡排序、快速排序和二分查找的C语言实现

1 #include <stdio.h> 2 3 #define ASC 0 //升序,从左到右,从小到大 4 #define DESC 1 //降序,从左到右,从大到小 5 #define TRUE 1 //布尔值,真 6 #define FALSE 0 //布尔值,假 7 8 typedef int datatype; //定义数组元素的类型,这里暂定为int 9 10 void selectSort(datatype array_to_sort[], int length, int mo

C语言数组之冒泡排序+折半查找法(二分查找)

冒泡排序算法 1 int num[5]; 2 int i; 3 //循环接收用户输入的元素 4 for(i=0;i<5;i++){ 5 printf("请输入第%d个元素\n",i+1); 6 scanf("%d",&num[i]); 7 } 8 for(i=0;i<4;i++){ //外层循环,控制排序的轮数 9 int j; 10 for(j=0;j<4-i;j++){ //内层循环,控制冒牌排序每轮的次数 11 if(num[j]&g

Java学习 (七)、数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序

一.常用数组查找算法 工作原理:它又称为顺序查找,在一列给定的值中进行搜索,从一端的开始逐一检查每个元素,知道找到所需元素的过程. 例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1 1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int [] array={10,100,90,65,80,92}; 6 System.o