c语言编程题经典100例——(36~40例)

1,实现快速排序算法。

下面是用C语言实现快速排序算法的示例代码:

#include <stdio.h>  void swap(int* a, int* b) {  int t = *a;  *a = *b;  *b = t;  
}  int partition(int arr[], int low, int high) {  int pivot = arr[high];  int i = (low - 1);  for (int j = low; j <= high - 1; j++) {  if (arr[j] < pivot) {  i++;  swap(&arr[i], &arr[j]);  }  }  swap(&arr[i + 1], &arr[high]);  return (i + 1);  
}  void quickSort(int arr[], int low, int high) {  if (low < high) {  int pi = partition(arr, low, high);  quickSort(arr, low, pi - 1);  quickSort(arr, pi + 1, high);  }  
}  int main() {  int arr[] = {10, 7, 8, 9, 1, 5};  int n = sizeof(arr) / sizeof(arr[0]);  quickSort(arr, 0, n - 1);  printf("Sorted array: ");  for (int i = 0; i < n; i++) {  printf("%d ", arr[i]);  }  return 0;  
}

        快速排序算法的基本思想是,选择一个基准元素,将数组划分为两个子数组,左边的元素小于基准元素,右边的元素大于基准元素,然后递归地对左右两个子数组进行排序。在实现中,partition函数用来划分数组,并返回基准元素的最终位置。quickSort函数用来递归地排序左右两个子数组。

2,实现归并排序算法。

以下是C语言实现归并排序算法的示例代码:

#include <stdio.h>  void merge(int arr[], int left[], int right[], int left_size, int right_size) {  int i, j, k;  i = j = k = 0;  while (i < left_size && j < right_size) {  if (left[i] <= right[j]) {  arr[k++] = left[i++];  } else {  arr[k++] = right[j++];  }  }  while (i < left_size) {  arr[k++] = left[i++];  }  while (j < right_size) {  arr[k++] = right[j++];  }  
}  void mergeSort(int arr[], int n) {  if (n < 2) {  return;  }  int mid = n / 2;  int left[mid], right[n - mid];  for (int i = 0; i < mid; i++) {  left[i] = arr[i];  }  for (int i = mid; i < n; i++) {  right[i - mid] = arr[i];  }  mergeSort(left, mid);  mergeSort(right, n - mid);  merge(arr, left, right, mid, n - mid);  
}  int main() {  int arr[] = {10, 7, 8, 9, 1, 5};  int n = sizeof(arr) / sizeof(arr[0]);  mergeSort(arr, n);  printf("Sorted array: ");  for (int i = 0; i < n; i++) {  printf("%d ", arr[i]);  }  return 0;  
}

在这个示例代码中,merge函数将两个有序数组(left和right)合并为一个有序数组(arr)。mergeSort函数将整个数组分成两个子数组,递归地对它们进行排序,然后将它们合并。在主函数中,我们首先声明一个整数数组,然后计算它的大小,最后调用mergeSort函数对其进行排序。

3,实现链表中的两个节点之间的距离。

在链表中,两个节点之间的距离可以通过遍历链表并计算节点之间的差距来计算。以下是一种C语言实现的方式。

首先,我们需要定义链表节点的结构体:

struct Node {  int data;  struct Node* next;  
};

然后,我们可以定义一个函数来计算两个节点之间的距离:

int getDistance(struct Node* head, int x, int y) {  struct Node* ptr1 = head;  struct Node* ptr2 = head;  int distance = 0;  while(ptr1 != NULL && ptr2 != NULL) {  if(ptr1->data == x) {  ptr2 = ptr2->next;  } else {  ptr1 = ptr1->next;  }  if(ptr2 != NULL && ptr2->data == y) {  distance++;  ptr2 = ptr2->next;  } else {  ptr2 = ptr2->next;  }  }  return distance;  
}

        在上述代码中,我们使用两个指针 ptr1 和 ptr2 来遍历链表。指针 ptr1 用于寻找节点 x,而指针 ptr2 用于寻找节点 y。如果在遍历过程中找到 x,则我们将 ptr2 移动到下一个节点。如果在遍历过程中找到 y,则我们增加距离并移动 ptr2 到下一个节点。否则,我们继续移动 ptr1 和 ptr2 到下一个节点。当 ptr1 或 ptr2 到达链表的末尾时,我们就停止遍历。最后,返回的距离就是两个节点之间的距离。

请注意,这个函数假设 x 和 y 是存在于链表中的实际值,并且它返回的是这两个值之间的最短距离。如果链表中不存在这些值,或者如果它们不存在于同一个链表中,那么函数将返回0。

4,实现循环队列。

以下是用C语言实现循环队列的示例代码:

#include <stdio.h>  
#include <stdlib.h>  #define MAX_SIZE 5  typedef struct {  int data[MAX_SIZE];  int front;  int rear;  
} Queue;  void initQueue(Queue *q) {  q->front = 0;  q->rear = 0;  
}  int isQueueEmpty(Queue *q) {  return (q->front == q->rear);  
}  int isQueueFull(Queue *q) {  return ((q->rear + 1) % MAX_SIZE == q->front);  
}  void enqueue(Queue *q, int x) {  if (isQueueFull(q)) {  printf("Queue is full.\n");  return;  }  q->data[q->rear] = x;  q->rear = (q->rear + 1) % MAX_SIZE;  
}  int dequeue(Queue *q) {  int x;  if (isQueueEmpty(q)) {  printf("Queue is empty.\n");  exit(0);  }  x = q->data[q->front];  q->front = (q->front + 1) % MAX_SIZE;  return x;  
}  void printQueue(Queue *q) {  if (isQueueEmpty(q)) {  printf("Queue is empty.\n");  return;  }  printf("Queue elements: ");  int i = q->front;  while (i != q->rear) {  printf("%d ", q->data[i]);  i = (i + 1) % MAX_SIZE;  }  printf("\n");  
}  int main() {  Queue q;  initQueue(&q);  enqueue(&q, 10);  enqueue(&q, 20);  enqueue(&q, 30);  printQueue(&q);  printf("Dequeue element: %d\n", dequeue(&q));  printQueue(&q);  enqueue(&q, 40);  enqueue(&q, 50);  printQueue(&q);  enqueue(&q, 60);  printf("Dequeue element: %d\n", dequeue(&q));  printf("Dequeue element: %d\n", dequeue(&q));  printf("Dequeue element: %d\n", dequeue(&q));  printf("Dequeue element: %d\n", dequeue(&q));  printf("Dequeue element: %d\n", dequeue(&q));  return 0;  
}

5,实现静态数组的排序算法(冒泡排序、插入排序等)。

这里是使用 C 语言实现静态数组排序算法(冒泡排序和插入排序)的示例代码。

冒泡排序:

#include <stdio.h>  void bubbleSort(int arr[], int n) {  int i, j, temp;  for (i = 0; i < n-1; i++) {  for (j = 0; j < n-i-1; j++) {  if (arr[j] > arr[j+1]) {  temp = arr[j];  arr[j] = arr[j+1];  arr[j+1] = temp;  }  }  }  
}  int main() {  int arr[] = {64, 34, 25, 12, 22, 11, 90};  int n = sizeof(arr)/sizeof(arr[0]);  bubbleSort(arr, n);  printf("Sorted array: \n");  for(int i=0; i < n; i++) {  printf("%d ", arr[i]);  }  return 0;  
}

插入排序:

#include <stdio.h>  void insertionSort(int arr[], int n) {  int i, key, j;  for (i = 1; i < n; i++) {  key = arr[i];  j = i - 1;  while (j >= 0 && arr[j] > key) {  arr[j+1] = arr[j];  j = j - 1;  }  arr[j+1] = key;  }  
}  int main() {  int arr[] = {64, 34, 25, 12, 22, 11, 90};  int n = sizeof(arr)/sizeof(arr[0]);  insertionSort(arr, n);  printf("Sorted array: \n");  for(int i=0; i < n; i++) {  printf("%d ", arr[i]);  }  return 0;  
}

这两个算法都是对静态数组进行排序的基础算法。在 main 函数中,我们定义了一个静态数组,并对其进行排序,然后输出排序后的数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/180917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何设置带有密码的excel只读模式?

Excel只读模式大家都不陌生&#xff0c;那大家知道带有密码的只读模式吗&#xff1f;今天给大家分享如何设置带有密码的只读模式。 打开excel文件&#xff0c;将文件进行【另存为】设置&#xff0c;然后停留在保存路径的界面中&#xff0c;我们点击下面的工具 – 常规选项 在常…

浅谈数据资产价值评估

加gzh"大数据食铁兽“&#xff0c;了解更多大数据信息 数据是资产&#xff0c;是当前时代大背景下毋庸置疑的。随着科技的发展&#xff0c;数据的重要性越来越受到人们的关注。对于企业来说&#xff0c;数据是非常重要的资产&#xff0c;它可以为企业提供决策依据、增加市…

20天GMV超过百万美金!桌下迷你跑步机在TikTok Shop美国站热销

上周总GMV达到1.59亿美元&#xff0c;达到历史新高&#xff0c;是美国站自开通以来首次单周出单达到亿级&#xff1b;日均出单1660万美元&#xff0c;单日出单最高达2820万美元&#xff1b; 截至11月19日&#xff0c;GMV Top 5 的商品分类排名依次为&#xff1a;美妆个护、女士…

【论文复现】RoSteALS: Robust Steganography using Autoencoder Latent Space-2023-CVPR

代码链接&#xff1a;https://github.com/TuBui/RoSteALS 一定要按照dockerfile&#xff0c;requirements.txt和requirements2.txt配置环境 需要补充的库&#xff1a; pip安装&#xff1a;omegaconf slack slackclient bchlib (0.14.0版本) einops imagenet-c conda安装&…

4、stable diffusion

github 安装anaconda环境 conda env create -f environment.yaml conda activate ldm安装依赖 conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit11.3 -c pytorch pip install transformers4.19.2 diffusers invisible-watermark pip install -e…

C++学习之路(十一)C++ 用Qt5实现一个工具箱(增加一个进制转换器功能)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《时间戳转换功能》功能。为了继续丰富我们的工具箱&#xff0c;今天我们就再增加一个平时经常用到的功能吧&#xff0c;就是「 进制转换 」功能。下面我们就来看看如何来规划开发一个这样的小功能并且添加到我们的工具…

抖音本地生活服务商申请要多久审核通过?

近年来&#xff0c;随着互联网的普及和社交媒体的兴起&#xff0c;本地生活服务行业也迎来了巨大的发展机遇。作为最受欢迎的短视频平台之一&#xff0c;抖音也不例外。抖音本地生活服务商申请要多久审核通过&#xff1f;这是许多想要加入抖音本地服务行业的人们最关心的问题之…

Docker—共享应用程序

现在您已经构建了一个映像&#xff0c;可以共享它。要共享Docker映像&#xff0c;您必须使用Docker注册表。默认注册表是Docker Hub&#xff0c;是您使用的所有图像的来源。 Docker ID&#xff08;Docker标识&#xff09; Docker ID允许您访问Docker Hub&#xff0c;这是世界上…

绩效考核的基础及基本内容

人力资源是企业的第一资源&#xff0c;员工绩效水平决定着人力资源价值的实现程度&#xff0c;绩效是企业永远的重点&#xff0c;没有绩效&#xff0c;一切无从谈起。很多企业在实施考核时扩大了绩效考核的积极作用&#xff0c;并没有考虑企业对绩效考核负面效应的承载能力&…

深入了解Java8新特性-日期时间API:OffsetDateTime类

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概24000多字&#xff0c;预计阅读时间长需要20分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&…

easyExcel自定义导出,指定列,设置请求头背景色,加入合计行,设置合计行字体,背景色等等

效果图 1.引入easyExcel pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.1</version></dependency> 2.工具类-自定义样式handler-CustomCellWriteHandler import java.util…

信号分析仪-4024CA频谱分析仪 频率范围9kHz~9GHz

01 4024CA频谱分析仪 产品综述&#xff1a; 4024CA频谱分析仪是一款专为外场测试而设计的大宽带手持式实时频谱分析仪&#xff0c;最大实时分析带宽达到120MHz&#xff0c;具有实时频谱分析、5G NR解调分析、LTE FDD/TDD解调分析、GSM/EDGE解调分析、定向分析等多种测量功能…

【数据库连接池】01:连接池初始化

连接池初始化 OVERVIEW 连接池初始化1.Connection类Connection.hConnection.cpp 2.CommonConnectionPool类CommonConnectionPool.hCommonConnectionPool.cpp 1.Connection类 封装Connection类&#xff0c;在该类内调用mysql提供的接口实现对数据库的增删改查&#xff0c; Con…

QT6 Creator编译KDDockWidgets并部署到QT

为什么使用KDDockWidgets 为什么使用KDDockWidgets呢&#xff1f; 首先它是一个优秀的开源dock库&#xff0c;弥补QDockWidget的不足&#xff0c;详情见官网。 其次它支持QML&#xff0c;这是我最终选择这个dock库的主要原因&#xff0c;因为最近在考虑将前端界面用QML做&…

观鹤笔记1

>> 夜里无光&#xff0c;但他眼睛里有一泓粼粼泛光的泉。哪怕他自己穿得很单薄&#xff0c;身子看起来冷得发僵&#xff0c;可那份在受刑前夜仍然能安坐于墙角的平静&#xff0c;却令杨婉觉得有些温暖。 入人世&#xff0c;虽重伤而不嫉。 邓瑛的这种人性&#xff0c;在2…

SSM训练营管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 训练营管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系 统主要采用B/S模…

金字塔原理

金字塔原理 来自于麦肯锡公司的第一位女性咨询顾问芭芭拉•明托的著作《金字塔原理》。 原理介绍 此原理是一种重点突出、逻辑清晰、主次分明的逻辑思路、表达方式和规范动作。 金字塔的基本结构是&#xff1a;中心思想明确&#xff0c;结论先行&#xff0c;以上统下&#xff…

python学习之偏函数partial

偏函数的使用 作用&#xff1a;可以给已有的函数传入一部分参数&#xff0c;将其打包成另外一个函数源码&#xff1a;https://docs.python.org/3.7/library/functools.html#functools.partialdef partial(func, *args, **keywords):def newfunc(*fargs, **fkeywords):newkeywo…

Maven——坐标和依赖

Maven的一大功能是管理项目依赖。为了能自动化地解析任何一个Java构件&#xff0c;Maven就必须将它们唯一标识&#xff0c;这就依赖管理的底层基础——坐标。将详细分析Maven坐标的作用&#xff0c;解释其每一个元素&#xff1b;在此基础上&#xff0c;再介绍如何配置Maven&…

PostgreSQL日志中的SQL记录时机 —— log_statement 和 log_min_duration_statement

最近跟朋友讨论到PostgreSQL日志中的SQL记录时机&#xff0c;研究了下log_statement 和 log_min_duration_statement两个参数&#xff0c;记录一下。 一、 参数简介 1. log_statement ① 作用 控制记录SQL的类型&#xff0c;可选值为&#xff1a; none&#xff1a;关闭&…