数组排序,查找

简介: 数组排序,查找

前言

学习3种数组排序,2种查找法方法:

排序方法:选择法排序,直接法排序,冒泡法排序

查找方法:顺序查找。2分查找法

在这里我认为看会代码就是最好的我解释,当然注释也是非常重要的,

1.选择法排序

一般常用方法

选择法排序。从键盘输入10个数,要求按升序排序,输出排序结果 f

(1)利用循环语句由键盘输入10个数依次放入a数组。{k= for(i=①第1轮用a[0]依次与 a[1],a[2],…,a[9]进行比较,若次序不对就交换。本轮结束后,a[0]中就是10个数中的最小数。

②第2轮用a[1]依次与a[2],…,a[9]进行比较,处理方法与①相同。[1]中为10个数中的次小数。

③重复上述过程,至第9轮,比较a[8]与a[9],把小者存入a[8],此时a[9]最大数。到此为止,10个数已按升序排好。

环变量j从i+1循环到9。


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
  int i, j, t, a[10];
  printf("请输人10个整数:");
  for (j = 0; j < 10; j++) {
  scanf("%d", &a[j]);
  }
  printf("\n");
  for (i = 0; i < 9; i++) {/* 外循环,循环9次*/
    for (j = i + 1; j < 10; j++) {/*内循环 */
    if (a[i] > a[j]) {//如果前面的数比后面的大
      t = a[i]; a[i] = a[j]; a[j] = t;/*交换位置*/
    }
    }
  }
  printf("排序之后:\n");
  for (j = 0; j < 10; j++) {
    printf("%4d",a[j]);
  }
  return 0;
}


结果:

319f319fa8f74396aa4542df3c19c6e0.png


2.直接法排序

直接法排序是选择排序的改进方法。例6.7的程序代码中,用于排序的双重循环中,每当a[i]>a[j]时,就交换 a[i]与a[j],实际上不需要每次都交换,只要增设一个变量k,用于记录每次较小数的下标,只需在本轮比较结束后,交换a[i]与a[k]即可

#include<stdio.h>
int main() {
  int i, j, t, a[10], k;
  printf("请输人10个整数:");
  for (j = 0; j < 10; j++) {
  scanf("%d", &a[j]);
  }
  printf("\n");
  for (i = 0; i < 9; i++) {/* 外循环,循环9次*/
  k = i;
  for (j = i + 1; j < 10; j++) {
    if (a[k] > a[j]) {
    k = j;//记录最小的数的下标
    }
  }
  if (i != k) {//这里是前面令k = i,如果交换了k就不等于i了 
    t = a[k], a[k] = a[i], a[i] = t;
  }
  }
  printf("排序之后:\n");
  for (j = 0; j < 10; j++) {
  printf("%4d",a[j]);
  }
  return 0;
}



结果:


cad560493bec48129c8c469769ba6f52.png


3.冒泡排序法

从键盘输入6个数据,存放到a[0]~a[5]的6个数组元素中。

①第1轮从a[0]到a[5]依次把两个相邻的元素两两比较,即a[0]与a[1]比,a[1]与a[2]比,.,a[4]与a[5]比。

每次相邻元素比较后,若顺序不对,则交换两个元素的值,否则不交换。假如数组a中a[0]~a[5]存放的6个数据如下:376524

从 a[0]到a[5]依次两两元素比较


结果:

d0771544a0f7440cb3932b3f7026119b.png


4.⼆分查找

include <stdio.h>
int main()
{
  int arr[] = {1,2,3,4,5,6,7,8,9,10};
  int left = 0;
  int right = sizeof(arr)/sizeof(arr[0])-1;
  int key = 7;//要找的数字
  int mid = 0;//记录中间元素的下标
  int find = 0;
  while(left<=right)
  {
    mid = (left+right)/2;
    if(arr[mid]>key)
    {
    right = mid-1;
    }
    else if(arr[mid] < key)
    {
    left = mid+1;
    }
    else
    {
    find = 1;
    break;
    }
 }
  if(1 == find )
  printf("找到了,下标是%d\n", mid);
  else
  printf("找不到\n");
}



相关文章
|
Java Maven
Maven 3.8.1 报错 Blocked mirror for repositories
Maven 3.8.1 报错 Blocked mirror for repositories
1248 0
Maven 3.8.1 报错 Blocked mirror for repositories
|
8月前
|
Python
探索Python虚拟环境:virtualenv、venv与pipenv比较
在Python开发中,有效的环境管理至关重要。virtualenv、venv和pipenv是常用的虚拟环境管理工具。virtualenv支持Python 2.7+和3.3+,可创建独立环境;venv为Python 3.3+内置库,简单轻量但功能有限;pipenv则结合了包管理和虚拟环境管理,生成Pipfile.lock确保依赖确定性和安全性,推荐作为首选工具。
315 2
|
10月前
|
存储 边缘计算 自然语言处理
25 个值得关注的检索增强生成 (RAG) 模型和框架
大型语言模型(LLM)如GPT-4在自然语言处理(NLP)领域展现了卓越能力,但也存在知识截止、静态知识库和内存限制等局限。检索增强生成(RAG)通过集成检索机制,允许LLM动态访问和整合外部数据源,提高了生成响应的准确性、相关性和时效性。本文深入探讨了25种先进的RAG变体,每种变体都旨在优化检索和生成过程的特定方面,涵盖成本限制、实时交互和多模态数据集成等问题,展示了RAG在提升NLP能力方面的多功能性和潜力。
407 4
25 个值得关注的检索增强生成 (RAG) 模型和框架
|
数据采集 Web App开发 存储
Python-数据爬取(爬虫)
【7月更文挑战第24天】
208 7
|
机器学习/深度学习 人工智能 算法
探索软件测试的新篇章: 自动化与AI的结合
本文深入探讨了自动化测试的演变,并着重介绍了人工智能(AI)技术如何革新传统的软件测试实践。通过分析AI在测试用例生成、缺陷预测和测试结果分析中的应用,本文揭示了AI技术提高测试效率和准确性的潜力,同时指出了实施过程中可能面临的挑战和限制。文章还讨论了未来趋势,包括AI技术的进一步发展以及它如何影响软件测试行业的职业发展轨迹。
169 27
|
11月前
|
缓存 JavaScript 前端开发
深入理解Vue.js中的计算属性与侦听属性
【10月更文挑战第5天】深入理解Vue.js中的计算属性与侦听属性
150 0
|
11月前
|
编译器 API C语言
【QT速成】半小时入门QT6之QT前置知识扫盲(一)
【QT速成】半小时入门QT6之QT前置知识扫盲(一)
803 0
|
图形学 开发者
【unity小技巧】两种办法解决FPS游戏枪或者人物穿墙穿模问题
【unity小技巧】两种办法解决FPS游戏枪或者人物穿墙穿模问题
772 0
|
机器学习/深度学习 人工智能 自动驾驶