目录:

1、冒泡排序(Bubble Sort)

2、选择排序(Selection Sort)

3、插入排序(Insertion Sort)

4、希尔排序(Shell Sort)

5、归并排序(Merge Sort)

6、快速排序(Quick Sort)

7、堆排序(Heap Sort)

8、计数排序(Counting Sort)

9、桶排序(Bucket Sort)

10、基数排序(Radix Sort)

1、冒泡排序(Bubble Sort)

1、基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。

2、算法描述:

比较相邻的元素。如果第一个比第二个大,就交换它们两个;

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;

针对所有的元素重复以上的步骤,除了最后一个;

重复步骤1~3,直到排序完成。

3、实现列子:

public static void main(String[] args) {

int [] array={1,20,11,90,50,2000,39};

int steam;

boolean flase;

for(int i=0;i

flase=false;

for (int j=array.length-1; j>i; j--) {

if(array[j]

steam=array[j];

array[j]=array[j-1];

array[j-1]=steam;

flase=true;

}

}

if(!flase) break;

}

System.out.println(Arrays.toString(array));

}

2、选择排序(Selection Sort)

1、动态图

2、

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

2.1 算法描述

n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:

初始状态:无序区为R[1..n],有序区为空;

第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;

n-1趟结束,数组有序化了。

3、实现列子:

public static void main(String[] args) {

int[] array = { 11, 1, 22, 33, 55, 44, 3 };

for (int i = 0; i < array.length; i++) { //加入获取的第一个数字就是最小的开始与第二个数字进行比较

int min = i;

for (int j = i + 1; j < array.length; j++) {//从第二个数字开始往后循环比较

if (array[j] < array[min]) {

min = j;

}

}

SelectionSort.swap(array, i,min);

}

System.out.println(Arrays.toString(array));

}

private static void swap(int[] arr, int i, int j) {//比较值根据下表去相互替换

int temp = arr[i];//这是需要变更的下标值

arr[i] = arr[j];

arr[j] = temp;

}

3、插入排序(Insertion Sort)

1、动态图:

2、算法思想:

在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

3:列子:

Integer[] number = NumberUtil.getNumber(100000,1,100000);

long start=System.currentTimeMillis();

for (int i = 0; i < number.length - 1; i++) {

int current = number[i + 1];

int preIndex = i;

while (preIndex >= 0 && current < number[preIndex]) {

number[preIndex + 1] = number[preIndex];

preIndex--;

}

number[preIndex + 1] = current;

}

long end=System.currentTimeMillis();

System.out.println("用时:"+(end-start));

System.out.println(Arrays.toString(number));

4工具方法:

public static Integer[] getNumber(int n,int startNum,int endNum){

Integer [] val=new Integer[n];

for(int i=0;i

val[i]=new Integer((int)(Math.random()*(endNum-startNum))+startNum);

}

return val;

}

4、希尔排序(Shell Sort)

1、动态图

2、算法思想:

希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。

3、实现列子:

public static void main(String[] args) {

int[] array = { 11, 1, 22, 33, 55, 44, 3 };

int arr1=array.length;

int index1,index2=arr1/2;

while (index2>0) {

for (int i = index2; i < arr1; i++) {

index1=array[i];

int preIndex =i-index2;

while (preIndex>=0&&array[preIndex]>index1) {

array[preIndex + index2] = array[preIndex];

preIndex -= index2;

}

array[preIndex + index2] = index1;

}

index2 /= 2;

}

System.out.println(Arrays.toString(array));

}

5、归并排序(Merge Sort)

1、动态图:

2、基本思想:

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

把长度为n的输入序列分成两个长度为n/2的子序列;

对这两个子序列分别采用归并排序;

将两个排序好的子序列合并成一个最终的排序序列

3、实现列子:

Arrays.copyOfRange(array, 0, mid);

第一个参数表示源数组

第二个参数表示开始位置(取得到)

第三个参数表示结束位置(取不到)

public static void main(String[] args) {

int[] array = { 11, 1, 22, 33, 55, 44, 3 };

int[] sort2 = sort(array);

System.out.println(Arrays.toString(sort2));

}

private static int[] sort(int [] array) {

// TODO Auto-generated method stub

if(array.length<2){

return array;

}

int mid = array.length / 2;

int[] left = Arrays.copyOfRange(array, 0, mid);

int[] right = Arrays.copyOfRange(array, mid, array.length);

return merge(sort(left), sort(right));

}

public static int[] merge(int[] left, int[] right) {

int[] result = new int[left.length + right.length];

for (int index = 0, i = 0, j = 0; index < result.length; index++) {

if (i >= left.length)

result[index] = right[j++];

else if (j >= right.length)

result[index] = left[i++];

else if (left[i] > right[j])

result[index] = right[j++];

else

result[index] = left[i++];

}

return result;

}

java十大排序法_Java 十大排序算法相关推荐

  1. c语言找出最大值和最小值并按降序排输出,C语言用排序法给十个数降序排列,用C语言编写,输入10个数按降序排列...

    问题标题 C语言用排序法给十个数降序排列,用C语言编写,输入10个数按降序排列 2019-6-4来自ip:14.161.145.86的网友咨询 浏览量:562 手机版 问题补充: C语言用排序法给十个 ...

  2. 选择排序法对数组进行排序

    package selectionSort;import java.util.Arrays;public class Exam { //使用选择排序法对数组进行排序public static void ...

  3. 编写一个C程序,实现以下功能:定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序。在主函数中

    编写一个C程序,实现以下功能: 定义一个学生结构体Student(含学号.姓名.年龄.身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序.在主函数中 ...

  4. 张仰彪第二排序法_十大排序之冒泡和选择排序

    你好,我是goldsunC 让我们一起进步吧! 排序 所谓排序,就是指将一组数据,按照特定规则调换位置,使数据具有某种顺序关系(递增或递减).在排序过程中,数据的移动方式可分为直接移动和逻辑移动两种. ...

  5. java 读取大文件内容_java读取大文件

    java一般读取文件时,将文件文内容全部加在到内存,然后读取,但是这种读取方式很明显不适合读取大文件,在进行大文件处理时,考虑到内存有限,采用分次读取的方式. java分次读取文件内容有三种方式, 1 ...

  6. java大津法确定阈值,大津法得到自适应阈值

    大津法是一种能得到自适应阈值的方法,参考下面的博客 matlab代码修改完善后如下 function [ grayThresh ] = myotsu( GrayIm ) % 使用大津法求动态灰度阈值 ...

  7. java大津法确定阈值,大津法(最大类间阈值法)

    大津法又叫最大类间方差法.最大类间阈值法(OTSU).它的基本思想是,用一个阈值将图像中的数据分为两类,一类中图像的像素点的灰度均小于这个阈值,另一类中的图像的像素点的灰度均大于或者等于该阈值.如果这 ...

  8. matlab大津法函数,matlab 大津阈值分割【相关词_ 大津法阈值分割matlab】

    阈值法 阈值分割程序 Otsu Thresholding 赞(0) 踩(0) 收藏(0) 说明:大津法实现图像阈值分割的matlab源程序代码 (Otsu Thresholding Image sou ...

  9. java制作h5视频聊天_JAVA实现大华摄像头WEB方式实时显示视频,H5界面展示方式思路。...

    JAVA实现大华摄像头WEB方式实时显示视频,H5界面展示方式思路. 2018-09-17 问题:大华IPC枪型摄像头需要在WEB中显示实时监控视频,官方提供的SDK只有C#的桌面程序访问方式. 解决 ...

  10. java大文件导入_java导入大文件数据的解决方案

    2018年11月5号于南昌 中海蓝域小区 卧榻伴音弦 最近在做项目,一个20G大小的文件,要按行读入到数据库,妈呀,有什么好方法吗? 20G如果按照行读入的方式,需要20多个小时才能入库成功.主要性能 ...

最新文章

  1. 利用位运算和指针实现的交换两个数的程序
  2. splice方法_JavaScript数组常用方法
  3. Android+clipse导入工程提示:invalid project description
  4. 数据库系统和数据库管理系统的定义以及数据库管理系统的作用
  5. 论文解读:Structural Optimization Makes Graph Classification Simpler and Better
  6. 中国武打明星——杨丽菁的故事
  7. 一文读懂人工智能、机器学习、深度学习、强化学习的关系(必看)
  8. python,计算并发现闰月的规律
  9. 立体栅格地图_基于八叉树表示的三维栅格地图路径规划系统及方法与流程
  10. 西妥昔单抗丨艾美捷西妥昔单抗Cetuximab方案
  11. 怎么配置环境变量?(保姆级教程)
  12. java 判断cmyk_JAI ImageIO的纯Java替代品,用于检测CMYK图像
  13. Android课程设计-体育新闻app
  14. 临床执业助理医师(综合练习)题库【4】
  15. 【opencv】二维面找角点/关键点 实现
  16. ThinkPad 连接无线网络几分钟后无线自动关闭
  17. matplotlib绘制曲线图
  18. 网络安全学习记录-13
  19. #8.2波浪理论的预测性
  20. 学好ps应该怎么做?这几点你必须知道

热门文章

  1. pcsx2 模拟器 玩 psp 游戏 龙珠z:传奇
  2. 基于SSM的网上购物系统
  3. UE4 创建编辑器模块
  4. MP3播放(javazoom.jl.player.Player)
  5. AE zoom to selected 地图刷新
  6. 计算机网络故障的论述,计算机应用中常见的网络故障及解决方法
  7. 20120329_dmp 文件导入ibm p750-2个LPAR 小机知识点
  8. MySQL8.0和MySQL 5的不同
  9. Unity 讯飞实时语音转写(一)—— 使用WebSocket连接讯飞语音服务器
  10. iOS 开发全能工具箱