几种排序方式的java实现(01:插入排序,冒泡排序,选择排序,快速排序)
以下为集中排序的java代码实现(部分是在引用别人代码):
插入排序(InsertSort):
//代码原理
public static void iSort(int[] a){
for(int i = 1;i < a.length; i++){
if(a[i] < a[i-1]){
int temp = a[i];
while(temp < a[i-1]){
a[i] = a[i-1];
if(i-1 > 0){
i--;
}else{
break;
}
}
a[i-1] = temp;
}
}
}
//精简代码1
public static void iSort2(int[] a){
for(int i = 1;i < a.length; i++){
if(a[i] < a[i-1]){
int temp = a[i];
while(temp < a[i-1]){
a[i] = a[i-1];
if(i-1 > 0){
i--;
}else{
break;
}
}
a[i-1] = temp;
}
}
}
//精简代码2
for(current=1;current<=arr.length-1;current++){
//每当current变化,key和before都随之变化
key = arr[current];
before = current-1;//红色有序索引第一个值。 while(before>=0 && arr[before]>key){ arr[before+1] = arr[before];//大值向后移一位
before--;
} //插入点:before+1
arr[before+1] = key;
}
冒泡排序(BubbletSort):
public class BubbleSort {
public static int[] bSort(int[] a){
for(int j = a.length-1; j >= 1; j--){
// 如果flag没有变为false那么证明数组本身有序
boolean flag = true;
for(int i = 0; i <= j-1; i++){
if(a[i] > a[i+1]){
int temp = a[i];
a[i+1] = a[1];
a[i] = temp;
flag = false;
}
}
if(flag)
break;
}
return a;
}
}
选择排序(SelectionSort):
/*
* 选择排序基本思路:
* 把第一个元素依次和后面的所有元素进行比较。
* 第一次结束后,就会有最小值出现在最前面。
* 依次类推
*/
public class SelectionSort {
public static void sort(int[] data) {
for (int x = 0; x < data.length - 1; x++) {
for (int y = x + 1; y < data.length; y++) {
if (data[y] < data[x]) {
SortTest.swap(data, x, y);
}
}
}
}
}
快速排序(QuickSort):
/**
* 快速排序
* @author mly11
*
*/
public class QuickSort {
static int low = 0;
static int high = 0;
static int mid = 0;
public static void main(String[] args) {
int[] arr = {5,1,3,9,2,7,2,4}; // 开始的数组为
System.out.println("开始的数组为:");
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i]+"\t");
}
System.out.println(); // 排序
judge(arr); // 排序后遍历
System.out.println("排序后数组为:");
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i]+"\t");
}
System.out.println();
} // 判断数组是否为空
public static void judge(int[] arr){
if(arr.length > 0){
all(arr,0,arr.length-1);
}else{
System.out.println("换个吧");;
}
} // 循环条件,递归调用循环体
public static void all(int[] arr,int low,int high){
if(low < high){
// 用mid记录每一次选择的分界数字的角标,
mid = structure(arr, low, high); // 当low < mid -1的时候,从low到mid-1进行递归
if(low < mid - 1){
all(arr, low, mid-1);
} // 当high>mid+1时候,从mid+1到high递归
if(high > mid +1){
all(arr, mid+1, high);
}
}
} // 循环体 一次循环
public static int structure(int[] arr,int low,int high){
// 当索引low小于high时,进行运算,让小于所选值在左边,否则在右边
/* 原理:
取出a[low]的数据存入temp,使a[low]为空;开始循环:
当low < high 时,一直循环
while(low < high){
当low从第一个开始时,从后向前一一查找,如果比temp大,则high--;
否则交换a[low]和a[high],此时a[low]的值为a[high],a[high]为空;
现在从前(a[low]被a[high]占据的位置)向后查找,如果比temp小,则low++;
否则将a[low]的位置存入a[high](上一步为空的a[high]),此时a[low]为空;
}
a[low] = temp;
返回low,此时low的位置之前数据全部<a[low],low之后的位置的数据全部>a[low];
*/ int temp = arr[low];
while (low < high) {
while (low < high && arr[high] >= temp) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] < temp) {
low++;
}
arr[high] = arr[low];
}
arr[low] = temp;
return low; /*错误的方法
while(low < high){
int temp = arr[low];
while(arr[low] <= arr[high]){
high--;
}
arr[low] = arr[high];
low++;
arr[high] = arr[low];
arr[low] = temp;
}
return low;*/
} }
以上代码为自己在最开始接触的时候写的,不足之处请谅解。
几种排序方式的java实现(01:插入排序,冒泡排序,选择排序,快速排序)的更多相关文章
- C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序
C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...
- java结构与算法之选择排序
一 .java结构与算法之选择排序(冒择路兮快归堆) 什么事选择排序:从一组无序数据中选择出中小的的值,将该值与无序区的最左边的的值进行交换. 简单的解释:假设有这样一组数据 12,4,23,5,找到 ...
- JAVA实现--基础算法FOR选择排序
首先 实现简单的选择排序. 简单排序的思路很简单,就是通过遍历(数组的length次)的数组,每次遍历找出最小的放到数组的第一个位置,下次遍历时就不用考虑第0位置的数从第1的位置开始找1到length ...
- 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较
2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...
- 算法 排序lowB三人组 冒泡排序 选择排序 插入排序
参考博客:基于python的七种经典排序算法 [经典排序算法][集锦] 经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...
- 学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]
关于冒泡排序,选择排序,插入排序,希尔排序[资料收集] 以下资料来源与网络 冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到 ...
- python算法(一)基本知识&冒泡排序&选择排序&插入排序
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...
- C语言实现 冒泡排序 选择排序 希尔排序
// 冒泡排序 // 选择排序 // 希尔排序 // 快速排序 // 递归排序 // 堆排序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h& ...
随机推荐
- INSPIRED启示录 读书笔记 - 第31章 苹果公司给我的启示
苹果公司值得学习的经验 1.硬件为软件服务:苹果公司明白硬件必须为软件服务,软件直接服务用户,满足用户需求.采用多点触控显示屏.重力加速器.距离传感器这些硬件技术是为了配合软件满足用户需求 2.软件为 ...
- 微信内置浏览器和小程序的 User Agent 区别及判断方法
通过UA来判断不同的设备或者浏览器是开发者最常用的方式方法,而对于微信开发和小程序也是同样的一个情况,我们可以通过微信内置浏览器 User Agent 信息来判断其具体类型或者设备. 所以子凡就通过徒 ...
- Linux mysql主从同步配置
一.在两台Ubuntu机器上安装mysql1.检查系统中是否安装了mysql 这个是已经安装了的 没有安装的话执行上条命令===============================MySQL的一些 ...
- oracle 启动数据库与监听器
1.oracle 启动数据库与监听器 1)启动数据库 oracle用户进去 oracle/oracle sqlplus / as sysdba 然后startup 退出,然后启动监听进程 2)启动监听 ...
- 算法总结之 构造数组MaxTree
一个数组的MaxTree定义如下: 数组必须没有重复元素 MaxTree是一颗二叉树,数组的每一个值对应一个二叉树的节点 包括MaxTre树在内且在其中的每一颗子树上,值最大的节点都是树的头 给定一个 ...
- python进阶03
进程线程不管哪门语言都是一块可以被重视的方向,下面一起学习学习python中的进程,线程 1.进程线程区别 通俗解释:一个程序QQ的运行就是一个进程运行:QQ中打开多个页面互不影响可以同时操作的每个页 ...
- java filter 实现权限控制
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Http ...
- nginxif多条件结合判断(实现限速)
参考文章: https://yq.aliyun.com/articles/44957 需求: 要对某一ip下,使用android客户端的用户进行限速 原理 就是用SET变量进行. AND 就用变量叠加 ...
- Flume-NG源码阅读之HDFSEventSink
HDFSEventSink是flume中一个很重要的sink,配置文件中type=hdfs.与此sink相关的类都在org.apache.flume.sink.hdfs包中. HDFSEventSin ...
- 爬虫之MongoDB的图片
聚合: