菜鸡学习之插入排序------学习算法记录1
来源:互联网 发布:js闭包的理解 编辑:程序博客网 时间:2024/06/15 17:23
咳咳,第一次写博客,希望没人看我的博客 xD !写博客也是记录一下自己的学习过程吧。废话不多说,来,代码撸起来;
参考书目《算法导论》
什么是插入排序呢,书上把插入排序的过程比作是堆牌的过程。先拿一张,比如说是5,再从桌子上拿一张,假如是4,辣么就放到5的左边。对不对?是不是很简单!蛤蛤
之后的过程其实是一样的,抓到的牌记为key牌,一个一个的和之前已经排完序的序列比较,大就放在右边,小就放在左边。
伪代码如下(摘自算法导论):
INSERTION-SORT
for j = 2 to A.length
key = A[j]
//Insert A[j] into the sorted A[1...j - 1].
i = j - 1
while i >0 and A[i] > key
A[i+1] = A[i]
i = i - 1
A[i+1] = key
C++代码:
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+7;typedef long long ll;template<class T>int getArrayLen(T& array){ return (sizeof(array)/sizeof(array[0]));}int main(){ int arr[6] = {5,2,4,6,1,3}; int j, key, len = getArrayLen(arr); printf("%d\n",len); for(int i = 1;i < len;i++){ key = arr[i]; j = i - 1; while(j >= 0 && arr[j] > key){ //这里和伪代码不一样,伪代码的数组下标都加一了,所以这里是大于等于0 arr[j+1] = arr[j]; j--; } arr[j+1] = key; } for(int k = 0;k < len;k++){ printf("%d ",arr[k]); } return 0;}
哎,只怪自己之前c++没有学好,java用惯了,一直用arr.length(); 然后再C++里也用,简直太蠢了。后来在网上搜了一下怎么得到数组的长度,sizeof(arr)是指数组指针的大小
得到数组的大小可以定义一个模板,以后直接调用就可以啦,代码在上面!
好了,我滚去看书了
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
书后的一个练习题: 非升序排序 直接写代码吧:
C++代码:
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+7;typedef long long ll;template<class T>int getArrayLen(T& array){ return (sizeof(array)/sizeof(array[0]));}int main(){ int arr[6] = {5,2,4,6,1,3}; int j, key, len = getArrayLen(arr); for(int i = len - 2;i >= 0;i--){ key = arr[i]; j = i + 1; while(j < len && arr[j] > key){ arr[j-1] = arr[j]; j++; } arr[j-1] = key; } for(int k = 0;k < len;k++){ printf("%d ",arr[k]); } return 0;}
思路和升序其实是一样的,升序第一张key牌是第二个数,降序的第一张key牌是倒数第二个
- 菜鸡学习之插入排序------学习算法记录1
- 算法学习之排序(1)--插入排序
- 算法学习之:插入排序
- 算法学习之插入排序
- 经典算法学习:排序之插入排序
- [学习笔记]排序算法之插入排序
- 算法学习笔记之插入排序算法
- 算法学习与实践之插入排序
- 算法学习笔记之插入排序
- 算法导论学习之插入排序
- 算法学习之java实现插入排序
- Java再学习-算法之插入排序
- 算法学习之路(插入排序)
- 算法学习笔记之插入排序
- JAVA 学习算法之直接插入排序
- 算法学习-插入排序
- 算法系统学习-1排序-插入排序
- 算法学习之排序算法:插入排序(直接插入排序、折半插入排序、2-路插入排序)
- Python 2.7.x 和 3.x 版本的重要区别
- systat(统计分析软件) v13.1免费版下载及安装教程
- Java开发环境搭建(进阶配置三 ——MySQL)
- String和StringBuilder作为方法参数的区别
- Unity3D 打包后UI失效(FindGameObjectsWithTag)
- 菜鸡学习之插入排序------学习算法记录1
- POJ 1200 Crazy Search(哈希)
- 抽象类与接口
- adoop Error: java.io.IOException: Unable to initialize any output collector
- 你应该知道的RPC原理
- Hadoop中的zookeeper
- 关于 u3d 接入支付宝的补充
- 常见的流程控制语句
- 出现和隐藏