数组排序,查找

系列文章目录


前言

学习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");
}

猜你喜欢

转载自blog.csdn.net/chendemingxxx/article/details/134101481