经典算法(排序)

一、二分查找

#include <stdio.h>
int binarySearch(int* nums, int num, int length) {
	// 定义两个变量,一个存储左边界,一个存储右边界;最开始左边界为0,右边界为数组长度减一
	int i = 0;
	int j = length - 1;
	while (i <= j) {
		// 避免越界
		int mid = i + (j - i) / 2;
		// 使用中间位置的值与查找的值进行比较
		if (num == *(nums + mid)) {
			// 找到了
			return mid;
		}
		else if (num > *(nums + mid)) {
			// 将中间值加一替换左边界
			i = mid + 1;
		}
		else {
			// 将中间值减一替换右边界
			j = mid - 1;
		}
	}
	return -1;
}
int main() {
	// 在一个升序数组中查找指定的数字
	int nums[] = { 1,2,5,8,10,11,15,16,19,25,34,46,52 };
	// 求数组的长度
	int length = sizeof(nums) / sizeof(nums[0]);
	// 定义一个变量存储查找的数
	int num;
	printf("请输入要查找的数:");
	scanf("%d", &num);
	// 定义一个变量存储所要查找数的索引
	int index = binarySearch(nums, num, length);
	if (index == -1) {
		printf("对不起,该数组中不存在该元素");
	}
	else {
		printf("%d的索引为%d", num, index);
	}
	return 0;
}

二、冒泡查找

void buSort(int* num,int length)
{
    //3,14,13,15,6,7,11,8
    int i,j,cnt;
    for(i = length-1;i > 0;i--)
    {
        for(j = 0;j < i;j++)
        {
            if(num[j] > num[j+1])
            {
                cnt = num[j];
                num[j] = num[j+1];
                num[j+1] = cnt;
            }
        }
    }
}

三、插入排序

void inSort(int* num,int length)
{
    int i,j;
    for(i = 1;i < length;i++)
    {
        int val = num[i];
        for(j = i - 1;j >=0 && num[j] > val;j--)
        {
            num[j+1] = num[j];
        }
        num[j+1] = val;

    }
}

四、选择排序

void seSort(int* num,int length)
{
    int cnt,min;
    int i,j;
    for(i = 0;i < length-1;i++)
    {
        min = i;
        for(j = i+1;j < length;j++)
        {
            if(num[j]<num[min])
                min = j;
        }
        cnt = num[min];
        num[min] = num[i];
        num[i] = cnt;
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三木几

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值