冒泡排序,二分查找

排序

内部排序

将需要处理的数据加载到内部存储器中(内存中)

冒泡排序

每一轮的每一次比较只比较相邻两个数字,若大小有问题,则交换
第一轮需要比较全部,第一轮会把最大的数排到最后
第二轮需要比较前几个,最后一个不参与,第二轮会把第二大的数排到倒数第二
有n个数只需比较n-1轮

#include <stdio.h>
void main(){
    int arr[]={2,0,7,-2,5,4};
    int len=sizeof(arr)/sizeof(int);
    //第一轮
    int i, j;
    int temp;
    //len(arr)=5,不是6,第一轮比较了5次
    for(i=0;i<len;i++){
        for(j=0;j<len-i;j++){
            if(arr[j]>arr[j+1]){
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;

            }
        }
    }
    for(i=0;i<len;i++){
        printf("arr[%d]=%d ",i,arr[i]);
    }
}

查找

一般查找,二分查找

#include <stdio.h>
//顺序查找
int seqSearch(int arr[],int arrlen,int val){
    int i;
    for(i=0;i<arrlen;i++){
        if (arr[i]==val){
            return i;
        }
    }
    //如果在for循环中,没有执行到return,说明未找到
    return -1;
}
//二分查找:前提有序数组:用中间的数与所要查找的数进行比较,若查找的数小,则在左边查找
int binarySearch(int arr[],int leftIndex,int rightIndex,int findVal){
    //如果leftIndex>rightIndex,代表没有找到
    int midIndex=(leftIndex+rightIndex)/2;
    int midVal=arr[midIndex];
    if(leftIndex>rightIndex){
        return -1;
    }
    if(findVal<midVal){
        binarySearch(arr,leftIndex,midIndex-1,findVal);
    }
    else if(findVal>midVal){
        binarySearch(arr,midIndex+1,rightIndex,findVal);
    }
    else{
        return midIndex;
    }
}
void main(){
   int i;
   int arr[]={1,2,4,-1};
   int len = sizeof(arr)/sizeof(int);
   int j =seqSearch(arr,len,2);
   //printf("j=%d",j);
   int arrf[]={1,2,4,7,8,6,8,9};
   int lenf=sizeof(arrf)/sizeof(int);
   printf("%d\n",lenf);
   int Index=binarySearch(arrf,0,lenf,20);
   printf("%d",Index);
}
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值