java数据结构之常用排序算法
冒泡排序
private void maopao(int arr[]) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
选择排序
private void xuanze(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int min = arr[i];
int x = -1;
boolean b = false;
for (int j = i; j < arr.length; j++) {
if (arr[j] < min) {
b = true;
min = arr[j];
x = j;
}
}
if (b) {
int temp = arr[i];
arr[i] = min;
arr[x] = temp;
}
}
}
插入排序
private void charu(int[] arr2) {
int[] arr = new int[arr2.length];
for (int i = 0; i < arr2.length; i++) {
arr[i] = arr2[i];
for (int j = 0; j < i; j++) {
if (arr[i] >= arr[j] && arr[i] <= arr[j + 1]) {
arr = houyi(arr, j, i);
}
}
}
}
/**
* 指定位置后移
*
* @param arr
* @param j
* @param i
* @return
*/
private int[] houyi(int[] arr, int j, int i) {
int temp = arr[i];
for (int k = i; k > j; k--) {
arr[k] = arr[k - 1];
}
arr[j] = temp;
return arr;
}
希尔排序
/**
* 希尔排序
*
* @param arr
*/
private void xier(int[] arr) {
for (int i = arr.length / 2; i > 0; i = i / 2) {
for (int j = i; j < arr.length; j++) {
for (int k = j - i; k >= 0; k -= i) {
if (arr[k] > arr[i + k]) {
int temp = arr[k];
arr[k] = arr[k + i];
arr[k + i] = temp;
}
}
}
}
}
快速排序
/**
* 快速排序
*
* @param arr
* @param left
* @param right
*/
private void kuaisu(int[] arr, int left, int right) {
int l = left;
int r = right;
int pivot = arr[(left + right) / 2];
int temp = 0;
while (l < r) {
while (arr[l] < pivot) {//寻找左边第一个不小于pivot的索引
l += 1;
}
while (arr[r] > pivot) {//寻找右边第一个不大于pivot的索引
r -= 1;
}
if (l >= r) {
break;
}
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;//左右位置的值互换
if (arr[l] == pivot) {
r -= 1;
}
if (arr[r] == pivot) {
l += 1;
}
}
if (l == r) {
l += 1;
r -= 1;
}
if (left < r) {
kuaisu(arr, left, r);
}
if (right > l) {
kuaisu(arr, l, right);
}
}
基数排序(桶排序)
private static void radix(int[] arr) {
int max=arr[0];
for (int i = 1; i <arr.length ; i++) {
if (arr[i]>max){
max=arr[i];
}
}
int maxleng=(max+"").length();
for (int i = 0,n=1; i <maxleng ;n*=10, i++) {
int[][] arr2=new int[10][arr.length];
int[] indexs=new int[10];
int index=0;
for (int j = 0; j <arr.length ; j++) {
int yushu=arr[j]/n%10;
arr2[yushu][indexs[yushu]]=arr[j];
indexs[yushu]++;
}
for (int j = 0; j <arr2.length ; j++) {
for (int a = 0; a <indexs[j] ; a++) {
arr[index++]=arr2[j][a];
}
}
}
}
java数据结构之常用排序算法的更多相关文章
- (2)Java数据结构--二叉树 -和排序算法实现
=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDe ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- 我们一起来排序——使用Java语言优雅地实现常用排序算法
破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...
- Java常用排序算法及性能测试集合
测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...
- 常用排序算法的总结以及编码(Java实现)
常用排序算法的总结以及编码(Java实现) 本篇主要是总结了常用算法的思路以及相应的编码实现,供复习的时候使用.如果需要深入进行学习,可以使用以下两个网站: GeeksForGeeks网站用于学习相应 ...
- 面试中常用排序算法实现(Java)
当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...
- 常用排序算法java实现
写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...
- 转载部长一篇大作:常用排序算法之JavaScript实现
转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...
随机推荐
- LRJ-Example-06-01-Uva210
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstdlib> #include <cstrin ...
- oracle 优化GROUP BY
提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.下面两个查询返回相同结果但第二个明显就快了许多. 低效: SELECT JOB , AVG(SAL) FROM ...
- activiti 如何使用database前缀来区分activiti数据库和业务数据库
为什么80%的码农都做不了架构师?>>> 第一步是先集成好activiti,我使用的是5.22.0,使用springboot集成,pom文件如下: <parent> ...
- Java日志框架——JCL
JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging". 一.JCL原理 1.基本原理 JC ...
- Pipeline & PageProcesser
Pipeline & PageProcesser 这两部分是应该程序员自己实现的部分,因为PageProcesser关乎如何解析页面而Pipeline则是存储,推荐使用OOSpider也就是注 ...
- mac默认截图、截图代码
苹果系统自带截图功能 1 截取全屏:快捷键(Shift+Command+3) 直接按“Shift+Command+3“快捷键组合,即可截取电脑全屏,图片自动保存在桌面. 2 截图窗口:快捷键(Sh ...
- P1007 N钱M鸡问题
题目描述 已知公鸡 \(5\) 元钱一只,母鸡 \(3\) 元钱一只,小鸡 \(3\) 只 \(1\) 元钱. 告诉你一个整数 \(n(1 \le n \le 1000)\) ,你现在要花 \(n\) ...
- 关于methods、computed、watch的使用
关于methods.computed.watch的使用,前前后后我有转载过好几篇别人的文章.但始终没有自己成型的博文来记录,现自己尝试性的总结一下三者之间的区别: computed:计算属性 comp ...
- C# 从零开始写 SharpDx 应用 绘制基础图形
本文告诉大家通过 SharpDx 画出简单的 2D 界面 本文属于 SharpDx 系列 博客,建议从头开始读 本文分为两步,第一步是初始化,第二步才是画界面 初始化 先创建 RenderForm 用 ...
- C# 匹配可空变量
在 C# 7.0 的时候提供更好用的模式匹配方法,支持通过 is 直接转换对应的类,但是如果是尝试转换可空的对象,那么将会提示无法编译,或转换失败 在 C# 7.0 的 is 转换是十分好用的功能,例 ...