冒泡,选择,插入,快速,归并这五个排序应该是所有编程语言初学者所遇到过的,可能在实际的编程应用中不会遇到,但对于初学者而言能起到锻炼编程思维的作用。废话不多说,下面进入正题。
冒泡排序
冒泡排序的就是让大的数向后冒,让小的数向前冒。通过前后两个数据比较,不断将大的元素移动到尾部。其中,每一次外层循环都会将一个最大元素移动到末尾。

 public static void main(String[] args) {// TODO Auto-generated method stubint []arr= {-10, 2, 3, 246, -100, 0, 5};for(int i=0;i<arr.length-1;i++) {for(int j=0;j<arr.length-i-1;j++) {if(arr[j]>arr[j+1]) {int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}for(int a:arr) {System.out.print(a+" ");}}

选择排序
选择排序就是把无序区的最小元素与首元素互换位置,然后将有序区的区间扩大一位,直到所有无序区都变成有序区。


public static void main(String[] args) {// TODO Auto-generated method stubint []arr= {-10, 2, 3, 246, -100, 0, 5};for(int i=0;i<arr.length-1;i++) {int k=i;//位置还不确定的数据for(int j=i+1;j<arr.length;j++) {if(arr[j]<arr[k]) {k=j;//遍历找到比k小的索引,然后把j赋给k;}}if(i!=k) {int temp=arr[i];arr[i]=arr[k];arr[k]=temp;}}for(int a:arr) {System.out.print(a+" ");}}

插入排序
插入排序是把数组分为有序区和无序区两块,然后将无序区的指定索引的数插入到有序区的指定位置,假设第0个元素是已经排序好的,无序区第一次循环从1开始遍历,设置一个temp,找到要插入的位置,把temp插入到有序区指定位置。

public static void main(String[] args) {// TODO Auto-generated method stubint []arr= {-10, 2, 3, 246, -100, 0, 5};int j=0;for(int i=1;i<arr.length;i++) {int temp=arr[i];//temp存放将要插入的数据if(arr[i]<arr[i-1]) {for( j=i-1;j>=0&&arr[j]>temp;j--) {arr[j+1]=arr[j];//temp的位置空出来,把第j个的值赋给第j+1个;}arr[j+1]=temp;}}for(int a:arr) {System.out.print(a+" ");}}

快速排序
快速排序主要思想方法有两个:一趟排序和分治;一趟排序完成数组的第一次排序,设置一个键值data,找到对应正确的位置,data的值插进去;分治就是用分而治之的思想,将键值左右两侧分为两个部分,再调用递归,将左边的部分再分为两个部分,将右边的部分再分为两个部分,依此类推,直到将数组排列完。

public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = { -10, 2, 3, 246, -100, 0, 5 };QuickSort(arr, 0, arr.length - 1);for (int a : arr) {System.out.print(a + " ");}}public static int PartSort(int arr[], int low, int high) {int data = arr[low];/** 一次遍历的方法:插空法 定义一个data将arr[low]存起来,并把这个位置挖空*/while (low < high) {while (low < high && arr[high] >= data) {high--;}arr[low] = arr[high];/*** 从high,也就是后面往前遍历 找到比键值小的数据 插入到前面留下的空中 high位再次留下空来*/while (low < high && arr[low] <= data) {low++;}arr[high] = arr[low];}arr[low] = data;/** 循环退出后 low和high重合 将将键值赋给第low,并将low返回*/return low;}public static void QuickSort(int arr[], int low, int high) {if(low<high) {//防止发生栈溢出异常int index = PartSort(arr, low, high);QuickSort(arr, low, index - 1);QuickSort(arr, index + 1, high);  }}

归并排序
归并排序要点有两个:对于两个有序数组的合并;递归思想。合并两个有序数组要定义一个新数组temp来存放合并后的数组,并通过判断条件让新的数组在合并后成为有序数组。归并的时候让数组调用自己,一步步将数组的长度变小,当子数组被分治到只有一个元素的时候,子数组也就是有序数组,这时候可以调用合并有序数组的方法,整个数组也就完成了排序。

public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = { -10, 2, 3, 246, -100, 0, 5 };MergeSort(arr, 0, arr.length-1);for(int s:arr) {System.out.print(s+" ");}}
public static void merge(int arr[],int low,int mid,int high ) {int temp[]=new int[high-low+1];/** 创建数组的三种方法 * 1.new int[数组长度];* 2.{数组的数据};* 3.new int[]{数组的数据}*/int i=low;//第一个数组的首索引int j=mid+1;//第二个数组的首索引int k=0;//新数组的首索引while(i<=mid&&j<=high) {if(arr[i]<arr[j]) {temp[k++]=arr[i++];}else {temp[k++]=arr[j++];}}//把两个有序数组合并到新数组中while(i<=mid) {temp[k++]=arr[i++];}while(j<=high) {temp[k++]=arr[j++];}for(int n=0;n<temp.length;n++) {arr[n+low]=temp[n];}//排序好的数组放置在temp中,要将其复制到arr中。
}
public static void MergeSort(int arr[],int low,int high) {int mid=(low+high)/2;if(low<high) {//防止栈溢出异常MergeSort(arr,low,mid);MergeSort(arr,mid+1,high);merge(arr, low, mid, high);    }}

Java五大排序(冒泡,选择,插入,快速,归并)相关推荐

  1. php冒泡 插入选择 排序,说说PHP数组的三种排序(冒泡/选择/插入)方法

    说说PHP数组的三种排序(冒泡/选择/插入)方法 PHP #数组 #排序 #冒泡 #选择 #插入2012-05-30 10:17 一.冒泡排序法 说明:找到最大的数,排列到最后面,然后继续找 例: $ ...

  2. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  3. 【数据结构与算法】排序 冒泡、插入、选择 O(n^2)

    冒泡.插入.选择 O(n2) 基于比较 快排.归并 O(nlogn) 基于比较 计数.基数.桶 O(n) 不基于比较 一.如何分析一个排序算法? 学习排序算法的思路?明确原理.掌握实现以及分析性能. ...

  4. 算法笔记-排序算法(冒泡 选择 插入)

    首先罗列一下常见的十大排序算法: 一.冒泡排序 1. 定义: 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则 ...

  5. (经典实用五大排序)选择排序,计数排序,冒泡排序,快速排序,插入排序

    选择排序代码段 void SelectionSort(int a[], int size)//a数组,数组长度 {for (int i = 0;i < size - 1;i++)//选择排序:默 ...

  6. 数据结构(Java)-排序算法-选择排序

    选择排序: 选择排序也是一种简单的排序方法.它的基本思想是: 对于总共n个元素的数组arr: 第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换, 第二次从arr[1]~arr[n ...

  7. java排序算法(冒泡,插入,选择,快速,堆,归并,希尔,基数)

    import java.util.Arrays; import java.util.LinkedList;/*** * * 各种排序: 冒泡,插入,选择,快速,堆,归并,希尔,基数*/ public ...

  8. 插入,冒泡,选择,快速,归并,堆排序,java 泛型实现

    2019独角兽企业重金招聘Python工程师标准>>> package keepthinker.sort;import java.util.ArrayList; import jav ...

  9. 八大排序算法:插入(2:插入、希尔)、选择(2:选择、堆)、交换(2:冒泡、快速)、归并、基数

    八大排序算法 发表于2012/7/23 16:45:18  662397人阅读 分类: c/c++ 数据结构与算法 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排 ...

最新文章

  1. mysql 查询表结构 几种方法
  2. Vue2.x-05 iview的Select控件点击从后台加载数据
  3. python和工程造价_终于懂了自学造价的方法
  4. C++ 多态实现的三个条件
  5. 自然语言处理语言资源项目
  6. MinGW 使用 msvcr90.dll
  7. 《菜菜的机器学习sklearn课堂》逻辑回归
  8. 软件测试52讲-测试新技术篇
  9. 【数据库课程设计】金融数据库设计与实现
  10. 基于JSP+SERVLET的新闻发布系统(一)
  11. Python学习路线汇总,必看
  12. 选择SOA平台的标准是什么?
  13. wdr7660虚拟服务器设置,TP-Link TL-WDR7660无线桥接怎么设置?
  14. 计费在线计费和离线计费
  15. 第五人格显示服务器错误,第五人格服务器异常玩家秒变GM,时装随便买,玩家:这感觉真好!...
  16. 优课联盟 实境英语 Test for Unit 9
  17. 题目 1536: 最长单词
  18. wisp5.0 学习日记2
  19. 华为鸿蒙电视配置,华为旗下荣耀智慧屏PRO55英寸AI摄像头鸿蒙系统4K超清电视机...
  20. PyG Cora图数据集可视化教程

热门文章

  1. 小米note忘记解锁密码解决办法
  2. oracle分开中文和英文_英文简历绝对不能这样写
  3. Java-读取本地txt文件的问题
  4. LIS3DH使用心得
  5. 关于地方金融机构穿透式监管的几个观点
  6. 无线网卡windows命令行开启wifi(AP)
  7. 学习网-更新中(FPGA-图像处理-机器视觉)
  8. ups电源维修检测方法
  9. 唯快不破:如何破解违规外联难题?
  10. Boinx FotoMagico for Mac(电子相册制作工具)破解版安装