排序原理
时间:2021-09-06
本文章向大家介绍排序原理,主要包括排序原理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
冒泡排序
冒泡排序
- 核心思想
依次拿相邻运算作比较
-
图解
-
使用java打印出比较过程
int[] arr={1,4,8,9,0,2};
//打印效果
/*
arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] arr[3]-arr[4] arr[4]-arr[5]
arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] arr[3]-arr[4]
arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3]
arr[0]-arr[1] arr[1]-arr[2]
arr[0]-arr[1]
*/
//二维图形:两层for循环
//外层for循环控制行数 内层for循环控制本行的列数
//分析:每次比较的两个元素:前一个元素如果是arr[i] 后一个元素就是arr[i+1]
for(int i=0;i<arr.length-1;i++){//共arr.length-1行
for(int j=0;j<arr.length-i-1;j++){//让arr[j]作为前面的元素 arr[j+1]是后面的元素
//打印
System.out.print("arr["+j+"]-arr["+(j+1)+"]\t");
}
System.out.println();
}
- 把打印更改为比较即可
int[] arr={1,4,8,9,0,2};
//打印当前数组
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
//把打印更改为比较即可
for(int i=0;i<arr.length-1;i++){//共arr.length-1行
for(int j=0;j<arr.length-i-1;j++){//让arr[j]作为前面的元素 arr[j+1]是后面的元素
if(arr[j]<arr[j+1]){
int k=arr[j];arr[j]=arr[j+1];arr[j+1]=k;
}
}
}
//打印当前数组
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
选择排序
顺序排序
- 概念
顺序排序:依次拿当前元素何其后面的所有元素做比较
- 图解
- 使用代码模拟打印的效果
int[] arr={9,1,3,6,8,2};//要求从小到大排序
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
//打印的效果
/*
* arr[0]-arr[1] arr[0]-arr[2] arr[0]-arr[3] arr[0]-arr[4] arr[0]-arr[5]
* arr[1]-arr[2] arr[1]-arr[3] arr[1]-arr[4] arr[1]-arr[5]
* arr[2]-arr[3] arr[2]-arr[4] arr[2]-arr[5]
* arr[3]-arr[4] arr[3]-arr[5]
* arr[4]-arr[5]
* */
for(int i=0;i<arr.length-1;i++){//外层for循环记录当前元素的下标:
//System.out.println("当前元素:arr["+i+"]");
for(int j=i+1;j<arr.length;j++){
//arr[i]是当前元素
//arr[j]是当前元素后面的元素
//拿arr[i]和arr[j]比较
System.out.print("arr["+i+"]-arr["+j+"] ");
}
System.out.println();//打印换行
}
- 把打印更改为比较即可
冒泡排序与顺序排序的区别
//顺序排序:依次拿当前元素何其后面的所有元素做比较
int[] arr={9,1,3,6,8,2};//要求从小到大排序
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
//把打印更改为比较
for(int i=0;i<arr.length-1;i++){//外层for循环记录当前元素的下标:
for(int j=i+1;j<arr.length;j++){
//arr[i]是当前元素
//arr[j]是当前元素后面的元素
//拿arr[i]和arr[j]比较
if(arr[i]<arr[j]){
int k=arr[i];arr[i]=arr[j];arr[j]=k;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
//冒泡排序
for(int i=0;i<arr.length-1;i++){//共arr.length-1行
for(int j=0;j<arr.length-i-1;j++){//让arr[j]作为前面的元素 arr[j+1]是后面的元素
if(arr[j]<arr[j+1]){
int k=arr[j];arr[j]=arr[j+1];arr[j+1]=k;
}
}
}
//顺序排序
for(int i=0;i<arr.length-1;i++){//共arr.length-1行
for(int j=i+1;j<arr.length;j++){//arr[i]作为当前元素 arr[j]作为当前元素后面的元素
if(arr[j]<arr[i]){
int k=arr[j];arr[j]=arr[i];arr[i]=k;
}
}
}
/*
分析:
外层for循环变量i 都是从0开始到length-2:轮数相同 都是length-1轮
内层for循环变量j
冒泡排序:j从0开始到length-i-2 取值:length-i-1
顺序排序:j从i+1开始到length-1 取值:length-i-1
比较的元素:
冒泡排序:arr[j]和arr[j+1]比较
顺序排序:arr[i]和arr[j]比较
*/
插入排序
插入排序
- 核心
插入排序:假设前面元素是有序的:拿当前元素倒着和前面的元素做比较
- 代码
public static void main(String[] args) {
//插入排序:假设前面元素是有序的:拿当前元素倒着和前面的元素做比较
int[] arr={1,4,0,4,5,6,7,9,0,1};
print(arr);
paiXu(arr);
print(arr);
}
public static void paiXu(int[] array){
for(int i=1;i<array.length;i++){
//定义变量记录当前元素的值
int k=array[i];
int j;
for(j=i-1;j>=0;j--){//倒着比较
if(array[j]>k){
array[j+1]=array[j];//前面的元素后移一位
}else{
break;//找到k的正确位置 j+1
}
}
array[j+1]=k;
}
}
public static void print(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
}
原文地址:https://www.cnblogs.com/RenVei/p/14828906.html
- 教你如何查看Linux的CPU负载
- 想打造一个神经网络,自动给黑白照片上色?这儿有一份超详细教程
- WP_Widget_PostViews has a deprecated constructor 报错解决
- 详解Linux系统的CPU负载均值
- Linux服务器的进程查看命令详解
- 另类SEO分享:利用JS封装iframe躲过搜索引擎的抓取
- Linux :MAC 地址克隆方法
- 解决WordPress修改数据库表前缀后无法登陆的问题
- 解决启用WP-Super-Cache后出现的几个问题
- Shell下制作自解压安装包,实现脚本的简单加密
- WordPress(Twenty Ten主题)文章副标题修改教程
- ipvsadm启动报错解决办法,另附ipvsadm详细参数
- Linux:mv 命令的10个实用例子
- Linux优化方法收集与整理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python pty & magic | 加固shell
- 通达OA伪造SESSION | Nmap脚本
- Postman使用完全指南
- meterpreter shell | 加固shell
- R语言绘图:复杂散点图绘制
- windows下部署sentinel模式的Redis主从集群
- tmux | 加固shell
- Windows下离线部署Redis主从集群
- SSH 后门 | Nmap 脚本
- 【Tomcat源码解析】第二章:不用死记硬背记住Tomcat整体架构
- 计划任务后门 | Linux 后门系列
- alias后门 | Linux 后门系列
- vim 后门 | Linux 后门系列
- 个站建设基础教程
- 【Tomcat源码解析】第一章:如何搭建源码阅读环境