1.排序算法的介绍
排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程
1.1排序的分类
(1)内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序
(2)外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序
1.2冒泡排序
1.2.1冒泡排序的介绍
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部
将五个无序的数:{3, 9, -1, 10, -2} 使用冒泡排序法将其排成一个从小到大的有序数列
1.2.2冒泡排序的代码示例
用户输出一个数列,使用冒泡排序法将其排成一个从小到大的有序数列
#include<stdio.h> void main() { int arr[10], i, strLen, j ,temp; strLen = sizeof(arr) / sizeof(int); for (i = 0; i < strLen; i++) { printf("请输入数字:"); scanf_s("%d", &arr[i]); } for (j = 0; j < strLen - 1; j++) {//外层循环用来控制遍历的轮数 for (i = 0; i < strLen - 1 - j; i++) {//内层循环用来控制每轮的次数 if (arr[i] > arr[i + 1]) { temp = arr[i];//如果此次遍历的数组元素比下一个要遍历的元素大 arr[i] = arr[i + 1];//则通过temp变量,进行两个元素的数值的交换 arr[i + 1] = temp; } } } for (i = 0; i < strLen; i++) {//依次输出冒泡排序后的数组 printf("%d\t", arr[i]); } }
2.查找
2.1.查找介绍
在 C中,我们常用的查找有两种:
- 顺序查找
- 二分查找
2.2.查找代码示例
1. 有一个数列:{23, 1, 34, 89, 101}猜数游戏:从键盘中任意输入一个数,判断数列中是否包含该数【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值, 找不到提示没有。
#include<stdio.h> void main() { int num, i, j = 0; int arr[5] = { 23, 1, 34, 89, 101 }; printf("请输入你要查找的数字:"); scanf_s("%d", &num); for (i = 0; i < sizeof(arr) / sizeof(int); i++) {//按顺序依次遍历数组 if (num == arr[i]) {//判断每次遍历的数组的元素是否等于该数字 j = 1;//如果找到数字,将j的数值改为1,用于之后判断是否找到数字 break; } } if (j == 1) { printf("你要找的数字在数组中,并且下标为%d", i); } else{ printf("你要找的数字不在数组中"); } }
2.请输入一个有序数组进行二分查找,并输入一个数看看该数组是否存在此数,并且求出下 标,如果没有就提示"没有这个数"。 二分查找的前提是,该数组是一个有序数组
#include<stdio.h> int find(int low, int high, int num, int arr[]) { int mid; for (mid = (low + high) / 2; low <= high;) { if (arr[mid] == num) {//如果mid指向的数组元素与要找的数字一致 return mid;//则return mid 即返回它的下标 } else if (arr[mid] > num) {//如果mid指向的数组元素大于要找的数字 high = mid - 1;//则说明要找的数字比midmid指向的数组元素小,它的区间应该在mid左侧 mid = (low + high) / 2;//因此,high就指向mid - 1的位置 }//从而实现到mid左侧进行继续查找 else if (arr[mid] < num) {//如果mid指向的数组元素小于要找的数字 low = mid + 1;//则说明要找的数字比midmid指向的数组元素大,它的区间应该在mid右侧 mid = (low + high) / 2;//因此,mid就指向mid + 1的位置 } // 从而实现到mid右侧进行继续查找 } return -1;//如果for循环没有return mid 退出,则说明没有找到,执行完后return -1 表示没找到 } void main() { int arr[7], i, num; for (i = 0; i < sizeof(arr) / sizeof(int); i++) { printf("请输入数字:"); scanf_s("%d", &arr[i]); } printf("请输入要查找的数字:"); scanf_s("%d", &num); i = find(0, 6, num, arr); if (i != -1) { printf("你要找的数字在数列中,并且它的下标是%d", i); } else { printf("你要找的数字不在数列中"); } }