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


相关文章
|
22天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
66 8
|
22天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
60 7
|
2月前
|
算法 C语言
【C语言】排序查找
【C语言】排序查找
|
2月前
|
C语言
C语言学习笔记-知识点总结上
C语言学习笔记-知识点总结上
81 1
|
2月前
|
NoSQL 算法 Redis
Redis的实现三:c语言实现平衡二叉树,通过平衡二叉树实现排序集
本博客介绍了如何在C语言中实现一个平衡二叉树,并通过这个数据结构来模拟Redis中的排序集功能。
15 0
|
6月前
|
C语言
C语言学习笔记之初识字符串
C语言学习笔记之初识字符串
43 5
|
6月前
|
文件存储 C语言
|
6月前
|
存储 机器学习/深度学习 编译器
C语言代码学习笔记
<编程精粹:编写高质量C语言代码> 读书笔记
|
5月前
|
C语言
|
5月前
|
C语言