【C/C++】算法入门:排序/算法笔记
(设排序从小到大)
冒泡排序
这个大家都会,从第一个开始往后俩俩交换,然后第二个,最后到最后一个,复杂度n^2选择排序
思路和冒泡差不多,比如要得到从小到大的排序,就是从第一个开始,i取1~n,每次取[i,n]中的最小值,将最小值和a[i]交换。
我写的垃圾代码,中间还写错了改了半天:
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 0x3F3F3F3F;
void show_ans(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
//这个函数有问题:
int find_min(int a[], int begin, int n, int& loc)
{
int min = maxn;
for (int i = begin; i < n; i++)
{
if (a[i] < min)
{
min = a[i];
loc = i;
//printf("%d\n",min);
//break; 这里不能写break,不然就找不到最小值啦,寻找全局性最小一定要全跑完
}
}
return min;
}
//选择排序 从[i,n]中选择最小元素与a[i]交换
void selectSort(int a[], int n) //n是数组长度,因为数组传参的时候只传首地址,不能计算数组长度
{
for (int i = 0; i < n; i++)
{
int loc = 0;
int min = find_min(a, i, n, loc);
printf("%d min %d\n", i, min); //
swap(a[i], a[loc]);
show_ans(a, n);
printf("\n");
}
}
int main()
{
int a[] = {4,3,2,1};
int n = sizeof(a)/sizeof(a[0]);
printf("%d\n", n);
selectSort(a, n);
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
system("pause");
}
晴神的书上例程:
void selectSort(int a[], int n) //n是数组长度,因为数组传参的时候只传首地址,不能计算数组长度
{
for (int i = 0; i < n; i++)
{
int k = i;
for (int j = i; j < n; j++)
{
if (a[j] < a[k])
{
k = j;
}
}
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
非常简洁。
- 插入排序
to be continued...
【C/C++】算法入门:排序/算法笔记的更多相关文章
- javascript数据结构与算法--高级排序算法
javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...
- 在Object-C中学习数据结构与算法之排序算法
笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...
- c/c++ 通用的(泛型)算法 之 只读算法,写算法,排序算法
通用的(泛型)算法 之 只读算法,写算法,排序算法 只读算法: 函数名 功能描述 accumulate 求容器里元素的和 equal 比较2个容器里的元素 写算法 函数名 功能描述 fill 用给定值 ...
- javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)
javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...
- JS中算法之排序算法
1.基本排序算法 1.1.冒泡排序 它是最慢的排序算法之一. 1.不断比较相邻的两个元素,如果前一个比后一个大,则交换位置. 2.当比较完第一轮的时候最后一个元素应该是最大的一个. 3.按照步骤一的方 ...
- STL源代码分析——STL算法sort排序算法
前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SG ...
- stl_algorithm算法之排序算法
排序算法: 注意:容器中必须重载 op< ,排序中stl标准中要求用小于来进行比较. 7.53.sort //全排序. 7.54.stable_sort //稳定排序.两个或两个以上的相邻且相等 ...
- 面试常用算法总结——排序算法(java版)
排序算法 重要性不言而喻,很多算法问题往往选择一个好的排序算法往往问题可以迎刃而解 1.冒泡算法 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个 ...
- STL_算法_02_排序算法
◆ 常用的排序算法: 1.1.合并(容器A(全部/部分)&容器B(全部/部分)==>容器C(全部/部分),容器C中元素已经排好顺序),返回的值==>iteratorOutBegin ...
随机推荐
- c++学习笔记5(函数的缺省参数)
例: void func(int x1,int x2=2,int x3=3){} func (10)//等效于func (10,2,3) func (10,8)//等效于func (10,8,3) f ...
- zookeeper问题在公司可以 回到家用家里网不行 目前还没有解决
Opening socket connection to server 192.168.1.193/192.168.1.193:2181. Will not attempt to authentica ...
- [luogu4747]Intrinsic Interval
有一个结论,答案一定是所有包含其合法区间中$l$最大且$r$最小的 证明比较容易,考虑两个合法区间有交,那么交必然合法,同时交也必然包含该区间,因此这个区间一定是合法的(取$l$最大的和$r$最小的两 ...
- springboot访问静态资源404
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- 访问ajax请求后的结果
let getJPM = (function() { let result; let url ="xxx"; $.ajax({ type: "post", ur ...
- Codeforces 375C - Circling Round Treasures(状压 dp+最短路转移)
题面传送门 注意到这题中宝藏 \(+\) 炸弹个数最多只有 \(8\) 个,故考虑状压,设 \(dp[x][y][S]\) 表示当前坐标为 \((x,y)\),有且仅有 \(S\) 当中的物品被包围在 ...
- Codeforces 436E - Cardboard Box(贪心/反悔贪心/数据结构)
题面传送门 题意: 有 \(n\) 个关卡,第 \(i\) 个关卡玩到 \(1\) 颗星需要花 \(a_i\) 的时间,玩到 \(2\) 颗星需要 \(b_i\) 的时间.(\(a_i<b_i\ ...
- Atcoder Grand Contest 005 E - Sugigma: The Showdown(思维题)
洛谷题面传送门 & Atcoder 题面传送门 记先手移动棋子的树为红树,后手移动棋子的树为蓝树. 首先考虑一个性质,就是如果与当前红色棋子所在的点相连的边中存在一条边,满足这条边的两个端点在 ...
- Atcoder Grand Contest 054 题解
那天晚上由于毕业晚会与同学吃饭喝酒没打 AGC,第二天稍微补了下题,目前补到了 E,显然 AGC 的 F 对于我来说都是不可做题就没补了(bushi A 简单题,不难发现如果我们通过三次及以上的操作将 ...
- 【GS文献】从家畜到植物,通过基因组选择提高遗传增益
目录 说明 1.前言 2.植物GS瓶颈 3.提高GS预测的准确性 4.GS与现代育种技术结合 5.GS开源育种网络 说明 Enhancing Genetic Gain through Genomic ...