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

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、建立在有序序列基础之上的查找方法:二分法查找

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


总结:

  • 加强对算法的练习,能够提升对语言的理解。
posted @ 2025-08-08 08:36  yfceshi  阅读(7)  评论(0)    收藏  举报