c++数组排序,二分查找,增删改查,随机生成数组的集合程序

 

这里有个二分查找例子可供参考,使用了自定义函数可以实现你的题目要求: 

#include <stdio.h>

binarySearch(int a[], int n, int key){
    int low = 0;
    int high = n - 1;
    while(low<= high){
        int mid = (low + high)/2;
        int midVal = a[mid];
        if(midVal<key)
            low = mid + 1;
        else if(midVal>key)
            high = mid - 1;
        else
            return mid;
    }
    return -1;
}

int main(){
    int i, val, ret;
    int a[8]={-32, 12, 16, 24, 36, 45, 59, 98};
    for(i=0; i<8; i++)
        printf("%d\t", a[i]);

    printf("\n请输人所要查找的元素:");
    scanf("%d",&val);

    ret = binarySearch(a,8,val);

    if(-1 == ret)
        printf("查找失败 \n");
    else
        printf ("查找成功 \n");

    return 0;
}

冒泡排序: 

# include <stdio.h>
int main(void)
{
    int a[] = {900, 2, 3, -58, 34, 76, 32, 43, 56, -70, 35, -234, 532, 543, 2500};
    int n;  //存放数组a中元素的个数
    int i;  //比较的轮数
    int j;  //每轮比较的次数
    int buf;  //交换数据时用于存放中间数据
    n = sizeof(a) / sizeof(a[0]);  /*a[0]是int型, 占4字节, 所以总的字节数除以4等于元素的个数*/
    for (i=0; i<n-1; ++i)  //比较n-1轮
    {
        for (j=0; j<n-1-i; ++j)  //每轮比较n-1-i次,
        {
            if (a[j] < a[j+1])
            {
                buf = a[j];
                a[j] = a[j+1];
                a[j+1] = buf;
            }
        }
    }
    for (i=0; i<n; ++i)
    {
        printf("%d\x20", a[i]);
    }
    printf("\n");
    return 0;
}

 

c++数组排序,二分查找,有没有规定用什么方法排序呢

冒泡排序:

 

#include "stdio.h"
void main()
{
    int a[10]={10,8,7,20,30,9,1,50,100,-1};
    int i,j,t,k;
    printf("排序之前:\n");
    for(i=0;i<10;i++)
    	printf("%d\t",a[i]);
    printf("\n");
    for(i=0;i<10;i++)
    {
    	printf("i=%d,第%d轮:\n",i,i+1);
    	for(j=i+1;j<=9;j++)
    	{
    		if(a[i]>a[j])
    		{
    			t=a[i]; //t是临时变量
    			a[i]=a[j];
    			a[j]=t;	
    		}
    		//打印排序过程:
    		printf("j=%d\t",j);
    		for(k=0;k<10;k++)
		    	printf("%d\t",a[k]);
		    printf("\n");
		    //---------------
    	}	
    }
    printf("排序之后:\n");
    for(i=0;i<10;i++)
    	printf("%d\t",a[i]);
    printf("\n");
    
}

 

二分查找


#include "stdio.h"
void main()
{

    int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
    int left,right,mid;
    int num,cnt=0;
    printf("请输入你要查找的数据:");
    scanf("%d",&num);
    left = 0;
    right= 14;
    while(left<=right){
    	//计算查找次数
    	cnt++;
    	//获取中间位置元素的下标
    	mid = (left+right)/2;
    	if(num<a[mid]){
    		//往右找
    		left=mid+1;
    	}else if(num>a[mid]){
    		//往左找
    		right=mid-1;
    	}else{
    		//找到了
    		printf("在第%d个位置找到了数据,共查找%d次\n",mid+1,cnt);
    		break;
    	}
    };
    if(left>right){
    	printf("你要查找的数据不存在\n");	
    }
}

 

先进行冒泡排序,二分查找就是从排好序的数组的中间开始查找,根据大小再向左右再找对半的中间值比较,直到结束或找到为止

合并后的代码: 

# include <stdio.h>

binarySearch(int a[], int n, int key){
    int low = 0;
    int high = n - 1;
    while(low<= high){
        int mid = (low + high)/2;
        int midVal = a[mid];
        if(midVal<key)
            low = mid + 1;
        else if(midVal>key)
            high = mid - 1;
        else
            return mid;
    }
    return -1;
}

int main(void)
{
	int  val, ret;
	
    int a[] = {900, 2, 3, -58, 34, 76, 32, 43, 56, -70, 35, -234, 532, 543, 2500};
    int n;  //存放数组a中元素的个数
    int i;  //比较的轮数
    int j;  //每轮比较的次数
    int buf;  //交换数据时用于存放中间数据
    n = sizeof(a) / sizeof(a[0]);  /*a[0]是int型, 占4字节, 所以总的字节数除以4等于元素的个数*/
    
     printf("排序前的数组为:\n");
    for (i=0; i<n; ++i)
    {
        printf("%d\x20", a[i]);
    }
    
    printf("\n\n");
    
    for (i=0; i<n-1; ++i)  //比较n-1轮
    {
        for (j=0; j<n-1-i; ++j)  //每轮比较n-1-i次,
        {
            if (a[j] > a[j+1])
            {
                buf = a[j];
                a[j] = a[j+1];
                a[j+1] = buf;
            }
        }
    }
    
    printf("排序后的数组为:\n\n");
    for (i=0; i<n; ++i)
    {
        printf("%d\x20", a[i]);
    }
    printf("\n\n请输入要查找的数:");
    
    
   
    scanf("%d",&val);
 
    ret = binarySearch(a,20,val);
 
    if(-1 == ret)
        printf("查找失败,按任意键退出 \n");
    else
        printf ("查找成功 \n");
    
    
    
}

 

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632