C语言学习笔记——排序和查找(一)

简介: C语言学习笔记——排序和查找

1.排序算法的介绍

排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程

1.1排序的分类

(1)内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序

(2)外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序

1.2冒泡排序

1.2.1冒泡排序的介绍

冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部

  将五个无序的数:{3, 9, -1, 10, -2} 使用冒泡排序法将其排成一个从小到大的有序数列

825eef153b5d42bdb82a90c0ec49ab22.png

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]);
  }
}

8315710ab0da4d78b9674643e429cf56.png

2.查找

2.1.查找介绍

在 C中,我们常用的查找有两种:

  1. 顺序查找
  2. 二分查找

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("你要找的数字不在数组中");
  }
}

2651a3baadb34703a3379bd4f1940a38.png

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("你要找的数字不在数列中");
  }
}

06fda7b724844d45bd6d8cac0d69cd9e.png


相关文章
|
10天前
|
算法 C语言
【C语言】排序查找
【C语言】排序查找
|
13天前
|
C语言
C语言学习笔记-知识点总结上
C语言学习笔记-知识点总结上
56 1
|
17天前
|
NoSQL 算法 Redis
Redis的实现三:c语言实现平衡二叉树,通过平衡二叉树实现排序集
本博客介绍了如何在C语言中实现一个平衡二叉树,并通过这个数据结构来模拟Redis中的排序集功能。
11 0
|
4月前
|
C语言
C语言学习笔记之初识字符串
C语言学习笔记之初识字符串
41 5
|
4月前
|
文件存储 C语言
|
4月前
|
存储 机器学习/深度学习 编译器
C语言代码学习笔记
<编程精粹:编写高质量C语言代码> 读书笔记
|
3月前
|
C语言
|
3月前
|
C语言
|
3月前
|
C语言
C语言学习笔记-W3
w3 条件,循环和数组
31 0
|
4月前
|
IDE 开发工具 C语言
C primer plus 学习笔记 第2章 C语言概述
C primer plus 学习笔记 第2章 C语言概述