C语言基础_排序算法和二分法查找

发布于:2025-08-07 ⋅ 阅读:(30) ⋅ 点赞:(0)

0、排序算法_选择排序:

  • 概念:每次排序把未排序序列当中的极值找出来放到前面
// 以从大到小排序为例
#include<stdio.h>
#define SZ 5
	int main() {
	int a[SZ] = { 1,5,4,2,3 };
	// 选择排序(从大到小)
	int i, j, Max, Max_p,tem;
	for (i = 0; i <= ((sizeof(a) / sizeof(a[0])) - 2); i++) {
		Max = a[i];
		Max_p = i;
		// 找当前一轮中的最大值
		for (j = i + 1; j <= ((sizeof(a) / sizeof(a[0])) - 1); j++) {
			if (a[j] > Max) {
				Max_p = j;
				Max = a[j];
			}
		}
		// 替换最左边元素
		tem = a[i];
		a[i] = a[Max_p];
		a[Max_p] = tem;
		printf("第%d轮Max:%d\n", i,Max);
	}
	printf("===========");
	for (i = 0; i < SZ; i++) {
		printf("%d  ", a[i]);
	} // 5  4  3  2  1
	return 0;
}

1、排序算法_冒泡排序:

  • 概念:每次排序把未排序序列当中的极值找出来放到前面
// 以从大到小排序为例
// 冒泡排序(从大到小)
#include<stdio.h>
int main(){
int i, j,tem;
for (i = 0; i < SZ - 1; i++) {
	for (j = 0; j < SZ-i; j++) {
		if (a[j] < a[j + 1]) {
			tem = a[j];
			a[j] = a[j + 1];
			a[j + 1] = tem;
		}
	}
}
for (i = 0; i < SZ; i++) {
	printf("%d  ", a[i]);
}
return 0}


2、排序算法_插入排序:

  • 概念:每次排序把未排序序列当中的极值找出来放到前面
// 以从大到小排序为例
#include<stdio.h>
int main(){
	int a[SZ] = { 1,5,4,2,3 };
	// 插入排序(从大到小)
	int i,j, tem;
	for (i = 1; i <= SZ - 1; i++) {
		// 有序序列中小的值右移,直到找到大于当前数的值,插入
		tem = a[i];
		j = i;
		while (j>0) {
			if (a[j-1] < a[j]) {
				tem = a[j];
				a[j] = a[j - 1];
				a[j - 1] = tem;
			}
			j--;
		}
	}
	for (i = 0; i < SZ; i++) {
	printf("%d  ", a[i]);
	}
	return 0;
}

3、建立在有序序列基础之上的查找方法:二分法查找

  • 思路,设置三个变量分别指向序列的最小值,中间值和最大值,每次循环就判断要查找的数值比中间值大还是比中间值小,移动最小值和最大值的位置,每次都能排除一半留下一半。


总结:

  • 加强对算法的练习,能够提升对语言的理解。

网站公告

今日签到

点亮在社区的每一天
去签到