数组排序,查找

系列文章目录


前言

学习3种数组排序,2种查找法方法:
排序方法:选择法排序,直接法排序,冒泡法排序
查找方法:顺序查找。2分查找法

在这里我认为看会代码就是最好的我解释,当然注释也是非常重要的,

1.选择法排序

一般常用方法
选择法排序。从键盘输入10个数,要求按升序排序,输出排序结果 f
(1)利用循环语句由键盘输入10个数依次放入a数组。{k= for(i=①第1轮用a[0]依次与 a[1],a[2],…,a[9]进行比较,若次序不对就交换。本轮结束后,a[0]中就是10个数中的最小数。
②第2轮用a[1]依次与a[2],…,a[9]进行比较,处理方法与①相同。[1]中为10个数中的次小数。
③重复上述过程,至第9轮,比较a[8]与a[9],把小者存入a[8],此时a[9]最大数。到此为止,10个数已按升序排好。
环变量j从i+1循环到9。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i, j, t, a[10];
	printf("请输人10个整数:");
	for (j = 0; j < 10; j++) {
		scanf("%d", &a[j]);
	}
		printf("\n");
		for (i = 0; i < 9; i++) {/* 外循环,循环9次*/
			for (j = i + 1; j < 10; j++) {/*内循环 */
				if (a[i] > a[j]) {//如果前面的数比后面的大
					t = a[i]; a[i] = a[j]; a[j] = t;/*交换位置*/
				}
			}
		}
	
		printf("排序之后:\n");
		for (j = 0; j < 10; j++) {
			printf("%4d",a[j]);
		}
		return 0;
}

结果:
在这里插入图片描述

2.直接法排序

直接法排序是选择排序的改进方法。例6.7的程序代码中,用于排序的双重循环中,每当a[i]>a[j]时,就交换 a[i]与a[j],实际上不需要每次都交换,只要增设一个变量k,用于记录每次较小数的下标,只需在本轮比较结束后,交换a[i]与a[k]即可

#include<stdio.h>
int main() {
	int i, j, t, a[10], k;
	printf("请输人10个整数:");
	for (j = 0; j < 10; j++) {
		scanf("%d", &a[j]);
	}
	printf("\n");
	for (i = 0; i < 9; i++) {/* 外循环,循环9次*/
		k = i;
		for (j = i + 1; j < 10; j++) {
			if (a[k] > a[j]) {
				k = j;//记录最小的数的下标
			}
		}
		if (i != k) {//这里是前面令k = i,如果交换了k就不等于i了 
			t = a[k], a[k] = a[i], a[i] = t;
		}
	}
	printf("排序之后:\n");
	for (j = 0; j < 10; j++) {
		printf("%4d",a[j]);
	}
	return 0;
}

结果:

在这里插入图片描述

3.冒泡排序法

从键盘输入6个数据,存放到a[0]~a[5]的6个数组元素中。
①第1轮从a[0]到a[5]依次把两个相邻的元素两两比较,即a[0]与a[1]比,a[1]与a[2]比,.,a[4]与a[5]比。
每次相邻元素比较后,若顺序不对,则交换两个元素的值,否则不交换。假如数组a中a[0]~a[5]存放的6个数据如下:376524
从 a[0]到a[5]依次两两元素比较


结果:
在这里插入图片描述

4.⼆分查找

include <stdio.h>
int main()
{
 	int arr[] = {1,2,3,4,5,6,7,8,9,10};
 	int left = 0;
 	int right = sizeof(arr)/sizeof(arr[0])-1;
 	int key = 7;//要找的数字
 	int mid = 0;//记录中间元素的下标
 	int find = 0;
 	while(left<=right)
 	{
 		mid = (left+right)/2;
 		if(arr[mid]>key)
 		{
 			right = mid-1;
 		}
 		else if(arr[mid] < key)
 		{
 			left = mid+1;
 		}
 		else
 		{
 			find = 1;
 			break;
 		}
 }
 	if(1 == find )
 	printf("找到了,下标是%d\n", mid);
 	else
 	printf("找不到\n");
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

再无B~U~G

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

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

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

打赏作者

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

抵扣说明:

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

余额充值