
数据结构与算法
healer-c
让灵魂和身体总有一个在路上
展开
-
任务分配问题-C++实现
文章目录题目描述思路代码题目描述任务分配问题)将n项任务分配n个不同的人来完成,假定第i个人完成第j个任务所需的代价为cij,这样所有的cij就构成了一个代价矩阵。请用回溯法或分支限界法设计一个算法,在给定代价矩阵的情况下求出最佳分配方案,使完成这n项任务的总代价最小。思路由于每个人都必须分配到工作,在这里可以建一个二维数组cost[i][j],用以表示i号工人完成j号工作所需的费用。使用全局变量minprince记录最小花费,并将其初始值设置成INT_MAX。使用c记录当前需要的花费,如果c已经原创 2021-05-21 17:15:45 · 3255 阅读 · 1 评论 -
字符串的反转
利用运算符 + 的重载#include #include using std::cout;using std::cin;using std::endl;using std::string;string Resversal(const string str){ string s; for (int i = 0; i //size()用于求string类对象的原创 2018-01-21 10:47:58 · 172 阅读 · 0 评论 -
希尔排序(C语言实现)
算法思想 希尔排序是特殊的插入排序,直接插入排序每次插入前的遍历步长为1,而希尔排序是将待排序列分为若干个子序列,对这些子序列分别进行直接插入排序,当每个子序列长度为1时,再进行一次直接插入排序时,结果一定是有序的。常见的划分子序列的方法有:初始步长(两个子序列相应元素相差的距离)为要排的数的一半,之后每执行一次步长折半。 希尔排序的过程演示如下: 代码实现#include ...原创 2018-01-21 10:52:46 · 46063 阅读 · 29 评论 -
三种方法交换两个数
1.利用中间变量交换两个数.void exchange(int *a, int *b) { int temp = *a; *a = *b; *b = *temp;}利用和差关系交换两个数.void exchange(int *a, int *b) { *a = *a + *b; *b = *a - *b; *a = *a - *b;原创 2018-01-21 11:00:35 · 348 阅读 · 0 评论 -
直接插入排序
算法思想 从数组第1位开始遍历(数组下标从0开始,设排序为升序排列),备份 当前下标的值,遍历该下标之前的元素,若该元素的值比备份下标的值大,则该元素向后移动一位,接着判断前一个元素;若该元素的值比备份下标的值小,则该元素不做处理。代码实现如下://升序直插排序#include #include void insert_sort(int *a, int len);int ma原创 2018-01-21 11:02:11 · 306 阅读 · 0 评论 -
冒泡排序
算法思想 从数组下标0开始,为每个位置找到排序后应有的值,从该位置开始遍历数组,每找到比该位置上元素的值小的元素,便交换两数。#include void Bubble_sort(int *a, int len);int main(void){ int i; int len; int * a; printf("请输入要排的数的个数:");原创 2018-01-21 11:03:56 · 209 阅读 · 0 评论 -
选择排序(C语言实现)
算法思想 从下标为0的位置开始,为每一个位置找到排序后应有的值,从该位置开始向后遍历数组,找到最小的值(不妨设排序为升序排列 ),放入该位置,接着为下一位置寻找该位置应有的值。#include void Select_sort(int *a, int len);int main(void){ int i; int len; int * a; pr原创 2018-01-21 11:06:36 · 666 阅读 · 0 评论 -
归并排序(递归、非递归、自然归并排序)
算法思想: 归并排序是分治法的典型应用,其思想是不断地将两个有序的数组合并为一个有序数组。 递归实现 #include <stdio.h>void Merge(int a[], int left, int m, int right);void MergeSortAux(int a[], int left, int right);void MergeSort(i...原创 2018-03-30 22:01:26 · 478 阅读 · 3 评论 -
快速排序
算法思想 快速排序是对冒泡排序的改进,在待排数据中任选一个数当作枢轴,然后将待排数中比枢轴大的放在一侧,比枢小的放在另一侧,接着对枢轴的两侧再选枢轴,在枢轴两侧放置,以次递归下,知道最后只有一个数据为止,然后逐步返回递归。 代码如下#include <stdio.h>int FindPos(int a[], int left, int right);void Qu...原创 2018-03-31 00:39:10 · 309 阅读 · 0 评论