算法(二)
来源:互联网 发布:北京淘宝美工培训2ds 编辑:程序博客网 时间:2024/06/06 03:47
- 桶排序
- 冒泡排序
- 快速排序
桶排序
适用于知道数组值的取值范围(较小)的排序
思想:根据数组的取值范围创建一个从0开始到数组取值范围最大值的桶数组,然后将桶数组中的数初始化为0,然后将数组中的值一一用值对应相对的桶数组下标的值将对应下标指定值+1,然后按顺序打印出桶每个下标值对应次数的下标值。
冒泡排序
思想:比较相邻的两个元素,如果顺序出错,就交换位置;一趟排好一个数,排数组大小-1趟就排好序列了。
伪代码:
Sort(A){ for(int i = 1; i <= A.length-1; i++) //代表第几趟 { for(int j = 1; j <= A.length-i; j++) //每一趟都不同再比较最后一个,因为最后的都是最大数 { if(A[j] > A[j+1]) { exchange A[i] with A[j]; } } }}
快速排序
思想:将一个数组以某个基点分为2组,该基点的左边的数都小于等于它,右边的数都大于等于它,然后对左边的子数组和右边的子数组递归相同的操作,最终可以得到排好序的数组。
复杂度:最差的情况下和冒泡排序一样都是n^2,但是平均情况是nlogn。
伪代码:
设i为左边起始指针,j为右边起始指针,k为基数点。
QuickSort(A,left,right){ i = left; j = right; k = A[i]; if (i > j) { return; } while(i < j) { while(i < j && A[j] >= k) { j--; } while(i < j && A[i] <= k) { i++; } if (i < j) //必须要判断,上面2个循环中的判断只是用于退出循环 { int t = A[i]; A[i] = A[j]; A[j] = t; } } A[left] = A[i]; A[i] = k; QuickSort(A,left,i-1); QuickSort(A,i+1,right);}
推荐一篇特别不错的博文(快排)
阅读全文
0 0
- 算法二(贪心算法)
- 算法尝试(二)
- 算法实现(二)
- 排序算法(二)
- MD5算法(二)
- 排序算法(二)
- (二)Dijkstra算法
- 算法导论(二)
- KMP算法(二)
- 迷宫算法(二)
- 排序算法(二)
- KMP算法(二)
- 算法基础训练(二)
- Part4:算法(二)
- RSA算法(二)
- 《算法》读书笔记(二)
- 随机化算法(二)
- java算法(二)
- mysql用户与权限
- Unity 滑动事件6个方向的实现
- HDU
- CentOS7学习(1)
- [POJ2151]check the difficulty-概率DP
- 算法(二)
- 斯坦福大学CS231课程笔记1
- 安卓逆向环境搭建,SDK manager闪退问题
- Python发展迅速的原因分析
- php JSON数据格式化方法
- ►奇说总002期:《战争中隐秘的智慧较量》10.12
- 每日区块链:日本三家银行巨头联合开展区块链P2P转账“现场测试”;IBM、超级账本加入区块链身份联盟
- 非旋转/可持久化treap(转自Sengxian's Blog)
- Codeforces Round #438 C. Qualification Rounds