排序从大体上来讲,做了两件事情:

1、比較两个数据项;

2、交换两个数据项。或复制当中一项

一、冒泡排序

大O表示法:交换次数和比較次数都为O(N*N)。

算法原理:

  1. 1、比較相邻的元素。假设第一个比第二个大,就交换他们两个。
  2. 2、对每一对相邻元素作相同的工作,从開始第一对到结尾的最后一对。

    在这一点。最后的元素应该会是最大的数。

  3. 3、针对全部的元素反复以上的步骤,除了最后一个。
  4. 4、持续每次对越来越少的元素反复上面的步骤,直到没有不论什么一对数字须要比較。
/*** 冒泡排序 demo* */public void bubbleSort(){int array [] = {22,41,22,12,93,42,23,54,77};for (int i = 0; i < array.length-1; i++) {for (int j = 0; j < array.length-i-1; j++) {int temp = 0;if (array[j]<=array[j+1]) {}else {temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}}}

二、选择排序

选择排序改进了冒泡排序,将必要的交换次数从O(N*N)降低到O(N)次。

不幸的是比較次数仍保持为O(N*N)。然而,选择排序仍然为大记录量的排序提出了一个很重要的改进,由于这些大量的记录须要在内存中移动,这就使交换时间和比較时间比起来。交换的时间显得更为重要。

算法原理:

对照数组中前一个元素跟后一个元素的大小,假设后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比較。前面“后一个元素”现变成了“前一个元素”。继续跟他的“后一个元素”进行比較假设后面的元素比他要小则用变量k记住它在数组中的位置(下标)。等到循环结束的时候,我们应该找到了最小的那个数的下标了。然后进行推断,假设这个元素的下标不是第一个元素的下标。就让第一个元素跟他交换一下值。这样就找到整个数组中最小的数了。然后找到数组中第二小的数。让他跟数组中第二个元素交换一下值,以此类推。

/******************************************************** *函数名称:SelectionSort *说明:    选择排序 *********************************************************/  void SelectionSort()  {  int array [] = {3,1,2,2,1,4,7,9,2,4,10};int out,in,min;for(out = 0; out < array.length - 1; out++)    //从第一个位置開始  {  min = out;//确保已经排出最小数据放在最左边的情况下。从最小数据右边第一个開始比較for (in = out + 1; in < array.length; in++) {   //寻找最小的数据索引   从1開始循环if (array[in] <= array[min]) { min = in;}}int temp = array[out];  array[out] = array[min];array[min] = temp;System.out.print("第"+out+"次排序:");for (int i = 0; i < array.length; i++) {System.out.print(array[i]+"\t");}System.out.println("");}  }  

  三、插入排序

在大多数情况下,插入排序算法是主要的排序算法中效率最高的一个,尽管插入排序算法仍然须要O(N*N)的时间。可是普通情况下,它要比冒泡排序快一倍,比选择排序还要快一点。

预设:局部有序

算法原理:

将n个元素的数列分为已有序和无序两个部分。例如以下所看到的:

{{a1}。{a2。a3,a4,…,an}}

{{a1⑴。a2⑴},{a3⑴,a4⑴ …,an⑴}}

{{a1(n-1),a2(n-1) ,…},{an(n-1)}}

每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比較。找出插入位置,将该元素插入到有序数列的合适位置中。

如果在一个无序的数组中,要将该数组中的数按插入排序的方法从小到大排序。如果啊a[]={3,5,2,1,4};插入排序的思想就是比大小,满足条件交换位置。一開始会像冒泡排序一样,但会比冒泡多一步就是交换后(a[i]=a[i+1]后)原位置(a[i])会继续和前面的数比較满足条件交换,直到a[i+1]前面的数组是有序的。

比方在第二次比較后数组变成a[]={2,3,5,1,4};

/*** 插入排序*/public void insertSort(){int array [] = {3,1,2};int in,out;for (out = 1; out < array.length; out++) {int temp = array[out];//temp作为暂时变量,存储被标记的队员in = out;while(in>0 && array[in-1] >=temp){array[in] = array[in-1];//队员右移一位--in;}array[in] = temp;//插入被标记的队员}}

四、对象排序

compareTo方法,对象排序有点须要注意。排序原理是这种,首先依据你所选属性进行排序。假设两个属性值一样,则依照下一个属性排,假设属性还是一样。则接着下一个属性往下排,依此类推。

/*** 对象排序*/public void objectSort(){Person person1 = new Person("zhang", "san", 24);Person person2 = new Person("li", "si", 21);Person person3 = new Person("wang", "wu", 28);Person [] person = {person1,person2,person3};int in,out;for (out = 1; out < person.length; out++) {Person temp = person[out];in = out;while(in>0 && person[in-1].getLastName().compareTo(temp.getLastName())>0){person[in] = person[in-1];--in;}person[in] = temp;System.out.print("第"+out+"次排序:");for (int i = 0; i < person.length; i++) {System.out.print(person[i].getLastName()+"\t");}System.out.println("");}}public static void main(String[] args) {new Sort().objectSort();}
}
class Person{private String lastName;private String firstName;private int age;public Person(String lastName,String firstName,int age){this.lastName = lastName;this.firstName = firstName;this.age = age;}public String getLastName(){return lastName;}
}

Java数据结构与算法之排序相关推荐

  1. Java数据结构与算法:排序算法

    1. 冒泡排序 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序. 它是一种较简单的排序算法.它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小:如果前者比 ...

  2. Java数据结构与算法——插入排序

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...

  3. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  4. Java 数据结构与算法系列之冒泡排序

    一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...

  5. Java数据结构和算法(一)——简介

    本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...

  6. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  7. java算法概述,Java数据结构与算法基础(一)概述与线性结构

    Java数据结构与算法基础(二)递归算法 Java数据结构与算法基础(一)概述与线性结构 学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路 一.数据结构概述 1.数据结构是什么?数据与 ...

  8. 【笔记】Java数据结构与算法

    [笔记]Java数据结构与算法 文章目录 [笔记]Java数据结构与算法 1.八大排序应用场景 2.未完待续-- 1.八大排序应用场景 冒泡排序:优化后的冒泡排序可用于当数据已经基本有序,且数据量较小 ...

  9. 数据结构与算法(三) 排序算法(代码示例)

    数据结构与算法三 排序算法 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 归并排序 5. 快速排序 6. 希尔排序 7. 堆排序 总结 1. 选择排序 选择排序的基本原理: 对于未排序的一组记 ...

最新文章

  1. 架构之美读书笔记03
  2. Python是一门什么样的语言
  3. STL源码剖析 第七章 仿函数(函数对象)
  4. linux中进程pts 1和pts 3,termial创建时ptmx与pts的关系
  5. 微信 android 省略号,安卓版微信再现重大Bug,点击链接直接崩溃
  6. 编译Android源码:Exception in thread main java.lang.UnsupportedClassVersionError:报错解决
  7. python去除列表中的重复元素,简单易理解,超详细解答,步骤分析
  8. TeamViewer 13界面功能介绍
  9. 酷狗歌词Krc批量转换工具Lrc [附转换编码DLL]
  10. 获取URL中的一级域名
  11. 典型概率分布(pdf公式和图示)
  12. 38241415106——胡应兰(实验一)
  13. 三天打鱼两天晒网--捕鱼小游戏
  14. 牛客小白月赛7 谁是神箭手
  15. 高兴,今天总算鸟枪换炮了~
  16. 最小链覆盖——Dilworth定理
  17. 【quasi-maximum likelihood decoder】一种有效的PSK信号准最大似然译码器matlab性能仿真
  18. C语言(谭浩强版本,主讲人:小甲鱼)P1-P9
  19. Linux打印命令lp详解
  20. 2020研究生数学建模E题--AlexNet深度网络解法(大雾能见度估计与预测)(含代码)

热门文章

  1. java 容器限制大小,容器中的Java与内存限制:LXC、Docker与OpenVZ
  2. 51nod 1021 石头归并
  3. 调整linux的时钟
  4. html5 Canvas画图4:填充和渐变
  5. 新年新气象,用新年的喜庆来迎接的生活
  6. 将Integer赋值给int(空指针异常)
  7. windows下用easybcd引导ubuntu出现grub的解决方案
  8. 云服务器ECS挖矿木马病毒处理和解决方案
  9. java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
  10. Push rejected: Push to origin/master was rejected错误解决方案