greedy algorithm, insertion sort, quick sort
always makes the choice that seems to be the best at that moment.
Example #1:
@function: scheduling
// You are given an array A of integers, where each element indicates the time
// thing takes for completion. You want to calculate the maximum number of things
// that you can do in the limited time that you have.
- //
- // main.cpp
- // greedy
- #include <iostream>
- using std::cout;
- using std::cin;
- using std::string;
- #define SIZEOF_ARRAY(a) (sizeof(a)/sizeof(a[0]))
- template<typename T>
- void insertion_sort(T *a, size_t n) {
- T tmp;
- size_t j, p;
- for (p = 1; p < n; p++) {
- tmp = a[p];
- for (j = p; 0 < j && tmp < a[j-1]; j--) {
- a[j] = a[j-1];
- }
- a[j] = tmp;
- }
- }
- template<typename T>
- void swap(T *a, T *b) {
- T tmp = *a;
- *a = *b;
- *b = tmp;
- }
- // Return median of "left", "center", and "right"
- // Order these and hide the pivot
- template<typename T>
- T median3(T *a, size_t left, size_t right) {
- size_t center = (left+right)/2;
- if (a[left] > a[center])
- swap(&a[left], &a[center]);
- if (a[left] > a[right])
- swap(&a[left], &a[right]);
- if (a[center] > a[right])
- swap(&a[center], &a[right]);
- /* Invariant: a[left]<=a[center]<=a[right] */
- swap(&a[center], &a[right-1]); /* HIde pivot */
- return a[right-1]; /* return pivot */
- }
- #define cutoff (3)
- template<typename T>
- void quicksort(T *a, size_t left, size_t right) {
- size_t i, j;
- T pivot;
- if (left + cutoff <= right) {
- pivot = median3(a, left, right);
- i = left;
- j = right-1;
- for (;;) {
- while (a[++i] < pivot) {}
- while (a[--j] > pivot) {}
- if (i < j)
- swap(&a[i], &a[j]);
- else
- break;
- }
- swap(&a[i], &a[right-1]); /* restore pivot */
- quicksort(a, left, i-1);
- quicksort(a, i+1, right);
- } else {
- insertion_sort(a+left, right-left+1);
- }
- }
- template<typename T>
- void sort(T *a, size_t n) {
- quicksort(a, 0, n-1);
- }
- template<typename T>
- void print_array(T *a, size_t n) {
- size_t i;
- cout << "[";
- for (i = 0; i < n-1; i++) {
- cout << a[i] << ",";
- }
- cout << a[i] << "]\n";
- }
- int scheduling(int *a, size_t n, int t) {
- int numberOfThings = 0, currentTime = 0;
- sort<int>(a, n);
- print_array<int>(a, n);
- for (int i = 0; i < n; i++) {
- currentTime += a[i];
- if (currentTime > t) {
- break;
- }
- numberOfThings++;
- }
- return numberOfThings;
- }
- int main(int argc, const char * argv[]) {
- int a[] = {15, 17, 15, 18, 10};
- int t = 40, n = SIZEOF_ARRAY(a);
- cout << "the Scheduling problem output: "<< scheduling(a, n, t) << "\n";
- return 0;
- }
output:
p.p1 { margin: 0; font: 11px Menlo }
span.s1 { font-variant-ligatures: no-common-ligatures }
the Scheduling problem output: [10,15,15,17,18]
3
Program ended with exit code: 0
https://www.hackerearth.com/zh/practice/algorithms/dynamic-programming/bit-masking/tutorial/
https://www.geeksforgeeks.org/greedy-algorithm-to-find-minimum-number-of-coins/
greedy algorithm, insertion sort, quick sort的更多相关文章
- C/C++ Quick Sort Algorithm
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50255069 快速排序算法,由C.A. ...
- 1101. Quick Sort (25)
There is a classical process named partition in the famous quick sort algorithm. In this process we ...
- PAT (Advanced Level) 1098. Insertion or Heap Sort (25)
简单题.判断一下是插排还是堆排. #include<cstdio> #include<cstring> #include<cmath> #include<ve ...
- PAT1101:Quick Sort
1101. Quick Sort (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CAO, Peng There is a ...
- PAT A1098 Insertion or Heap Sort (25 分)——堆排序和插入排序,未完待续。。
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- A1101. Quick Sort
There is a classical process named partition in the famous quick sort algorithm. In this process we ...
- 1098 Insertion or Heap Sort
1098 Insertion or Heap Sort (25 分) According to Wikipedia: Insertion sort iterates, consuming one in ...
- 1101 Quick Sort
There is a classical process named partition in the famous quick sort algorithm. In this process we ...
- PAT甲1101 Quick Sort
1101 Quick Sort (25 分) There is a classical process named partition in the famous quick sort algorit ...
随机推荐
- 5 秒克隆声音「GitHub 热点速览 v.21.34」
作者:HelloGitHub-小鱼干 本周特推的 2 个项目都很好用,Realtime-Voice-Clone-Chinese 能让你无需开启变声音,即可获得一个特定声音的语音.这个声音可以是你朋友的 ...
- 【AIOT】智能感知--物
From: https://liudongdong1.github.io/ 1. 物体检测 .1. 流体 D. V. Q. Rodrigues, D. Rodriguez and C. Li, &qu ...
- VirtualBox-虚拟硬盘扩容-win7
问题: 我在VirtualBox下搭建的win7系统只设置了一个C盘,当初只给硬盘分配32G,如今深受生活的毒打,发现只剩5G可用,装个PS都费劲. 我要扩容,扩容! 当前环境: VirtualBox ...
- WPF中实现动画的几种效果(最基础方式)
参考网址:https://blog.csdn.net/qq_45096273/article/details/106256397 在动画之前我们先了解一下几个声明式动画中常用的元素: 一.Storyb ...
- cookie实现访问时间查看
package day01.cookies; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEn ...
- 将VSCode添加至右键菜单(Windows下)
时间:2018-11-09 记录:byzqy 问题: Windows上面安装Visual Studio Code编辑器后,常常会因为安装的时候忘记勾选等原因,没有将"Open with Co ...
- java 后台解密小程序前端传过来的信息,解密手机号
package com.llny.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; import ...
- Python安装环境配置和多版本共存
Python安装环境配置和多版本共存 1.环境变量配置: (1) 右键点击"计算机",然后点击"属性" (2) 然后点击"高级系统设置" ( ...
- 15-SpringCloud Stream
Stream是什么及Binder介绍 官方文档1 官方文档2 Cloud Stream中文指导手册 什么是Spring Cloud Stream? 官方定义Spring Cloud Stream是一个 ...
- 学习Linux tar 命令:最简单也最困难
摘要:在本文中,您将学习与tar 命令一起使用的最常用标志.如何创建和提取 tar 存档以及如何创建和提取 gzip 压缩的 tar 存档. 本文分享自华为云社区<Linux 中的 Tar 命令 ...