java数据结构与算法(day2)--简单排序
模式:设计api实现api
简单排序
举例(商品排序)
1.1Comparable接口介绍(排序算法更有通用性:对象排序)
创建对象,并且生成豆子。创建Comparable接口
1 package cn.itcast.algorithm.sort;
2
3 public class Student implements Comparable<Student>{
4 private String username;
5 private int age;
6
7 public Student() {
8 }
9
10 public Student(String username, int age) {
11 this.username = username;
12 this.age = age;
13 }
14
15 /**
16 * 获取
17 * @return username
18 */
19 public String getUsername() {
20 return username;
21 }
22
23 /**
24 * 设置
25 * @param username
26 */
27 public void setUsername(String username) {
28 this.username = username;
29 }
30
31 /**
32 * 获取
33 * @return age
34 */
35 public int getAge() {
36 return age;
37 }
38
39 /**
40 * 设置
41 * @param age
42 */
43 public void setAge(int age) {
44 this.age = age;
45 }
46
47 public String toString() {
48 return "Student{username = " + username + ", age = " + age + "}";
49 }
50
51 public int compareTo(Student o){
52 return this.getAge()-o.getAge();
53 }
54 }
实例化对象,创建规则
1 package cn.itcast.algorithm.text;
2
3 import cn.itcast.algorithm.sort.Student;
4
5 public class TextComparable {
6 public static void main(String[] args) {
7 // 创建对象,调用方法测试
8 Student s1=new Student();
9 s1.setUsername("李四");
10 s1.setAge(18);
11
12 Student s2=new Student();
13 s2.setUsername("张三");
14 s2.setAge(20);
15
16 Comparable max = getMax(s1, s2);
17 System.out.println(max);
18 }
19
20 public static Comparable getMax(Comparable c1,Comparable c2){
21 int result=c1.compareTo(c2);
22 //判断result的情况
23 if (result>=0){
24 return c1;
25 }else {
26 return c2;
27 }
28 }
29
30 }
1.2 冒泡排序
排序原理:
1)比较相邻的元素,如果前一个元素比后一个大,就交换两个元素的位置。
2)对每一对相邻元素做相同的工作,从第一位元素到结尾最后一位元素。最终最后位置的元素就是最大值。
为什么叫冒泡排序?
冒泡的过程把合适的元素放到合适的位置
冒泡排序aip设计:
构造方法:Bubble():创建bubble()对象
成员方法:
1对数组内的元素进行排序
2判断相邻元素大小
3交互元素位置
冒泡排序程序设计:
1 package cn.itcast.algorithm.sort;
2
3 public class Bubble {
4
5 public static void sort(Comparable[] a){
6 for(int i=a.length-1;i>0;i--){
7 for(int j=0;j<i;j++){
8 //比较索引j和j+1的值
9 if (greater(a[j],a[j+1])){
10 exch(a,j,j+1);
11 }
12 }
13 }
14
15 }
16
17 private static boolean greater(Comparable v, Comparable w){
18 // int result=v.compareTo(w);
19 return v.compareTo(w)>0;
20
21 }
22
23 private static void exch(Comparable[] a,int i, int j){
24
25 Comparable temp;
26 temp = a[i];
27 a[i]=a[j];
28 a[j]=temp;
29 }
30 }
text
1 package cn.itcast.algorithm.text;
2
3 import cn.itcast.algorithm.sort.Bubble;
4
5 import java.util.Arrays;
6
7 public class BubbleText {
8 public static void main(String[] args) {
9 Integer[] arr={23,45,67,89,0,54,35};
10 Bubble.sort(arr);
11 System.out.println(Arrays.toString(arr));
12
13 }
14 }
1.3选择排序
排序原理:(映射索引)
假设第一个元素是最小值,和其他索引出的值进行比较,如果当前索引值大于其他处的索引值,则假定其它索引处为最小值,最后可以找到最小值的所在的索引
交互第一个索引处和最小值所在索引处所在的值
选择排序api设计
构造方法:
Selection
成员方法:
选择排序程序设计:
1 package cn.itcast.algorithm.sort;
2
3 public class Selection {
4 public static void sort(Comparable[] a){
5 for (int i = 0; i <= a.length-2; i++) {
6 int minIndex = i;
7 for (int j=i+1;j<a.length;j++){
8 if(greater(a[minIndex],a[j])){
9 minIndex=j;
10
11 }
12 }
13 exch(a,i,minIndex);
14 }
15
16 }
17
18 private static boolean greater(Comparable v , Comparable w){
19 return v.compareTo(w)>0;
20 }
21
22 private static void exch(Comparable[] a, int i, int j){
23 Comparable temp;
24 temp = a[i];
25 a[i]=a[j];
26 a[j]=temp;
27 }
28 }
text
1 package cn.itcast.algorithm.text;
2
3 import cn.itcast.algorithm.sort.Selection;
4
5 import java.util.Arrays;
6
7 public class SelectionText {
8
9 public static void main(String[] args) {
10 Integer[] a = {123,56,78,990,4569,789};
11 Selection.sort(a);
12 System.out.println(Arrays.toString(a));
13
14 }
15
16
17 }
java数据结构与算法(day2)--简单排序的更多相关文章
- 【Java数据结构与算法】简单排序、二分查找和异或运算
简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...
- Java数据结构和算法(五)--希尔排序和快速排序
在前面复习了三个简单排序Java数据结构和算法(三)--三大排序--冒泡.选择.插入排序,属于算法的基础,但是效率是偏低的,所以现在 学习高级排序 插入排序存在的问题: 插入排序在逻辑把数据分为两部分 ...
- Java数据结构和算法(三)--三大排序--冒泡、选择、插入排序
三大排序在我们刚开始学习编程的时候就接触过,也是刚开始工作笔试会遇到的,后续也会学习希尔.快速排序,这里顺便复习一下 冒泡排序: 步骤: 1.从首位开始,比较首位和右边的索引 2.如果当前位置比右边的 ...
- JAVA数据结构和算法 3-简单排序
排序中的两种基本操作是比较和交换.在插入排序中还有移动. 冒泡排序:两两比较相邻元素,如果较大数位于较小数前面,则交换: 每一趟遍历将一个最大的数移到序列末尾,共遍历N-1趟. 如果执行完一趟之后没有 ...
- Java数据结构与算法(2) - ch03排序(冒泡、插入和选择排序)
排序需要掌握的有冒泡排序,插入排序和选择排序.时间为O(N*N). 冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移. 插入排序: 从排序过程的中间开始(程 ...
- Java数据结构和算法(二)--队列
上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...
- Java数据结构和算法 - 简单排序
Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...
- Java数据结构和算法(九)——高级排序
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...
- Java数据结构和算法 - 高级排序
希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插 ...
- Java数据结构和算法 - 堆
堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...
随机推荐
- SQL语句查询关键字 多表查询
目录 SQL语句查询关键字 select from 编写顺序和查询数据 前期数据准备 编写SQL语句的小技巧 查询关键字之筛选 where 逻辑运算符 not and or between not b ...
- RocketMQ Schema——让消息成为流动的结构化数据
本文作者:许奕斌,阿里云智能高级研发工程师. Why we need schema RocketMQ 目前对于消息体没有任何数据格式的约束,可以是 JSON ,可以是对象 toString ,也可以只 ...
- 2022年8月20,第一组,周鹏,从1到m中随机取n个数,n<=m,显示出所有取法
static Random a1 =new Random(); static int m = a1.nextInt(20)+1;//随机取一个1到20的值 static int n = a1.next ...
- Python二维码扫描
原文链接:https://blog.easyctf.cn/Moxin/59365.html 模块准备 1.pyzbar pip install pyzbar 2.PIL 注意:PIL只支持Python ...
- DevExpress 的LayoutControl控件导致资源无法释放的问题处理
现象记录 前段时间同事发现我们的软件在加载指定的插件界面后,关闭后插件的界面资源不能释放, 资源管理器中不管内存,还是GDI对象等相关资源都不会下降. 问题代码 问题的代码大概如下. public v ...
- 用云服务器搭建frp服务(超详细)
初学.没有云服务器的时候总想着怎样才能让别人访问到自己的项目. 在查阅了百度,逛过了一些论坛之后,了解到了 内网穿透 这个词. 经过一番钻研,通过 手机 + KSWEB + 电脑 成功将内网服务映射出 ...
- [数据结构]克鲁斯卡尔(Kruskal)算法
算法的概念 与Prim算法从顶点开始扩展最小生成树不同,Kruskal算法是一种按权值的递增次序选择合适的边来构造最小生成树的方法.假设N=(V,E)是连通网,对应的最小生成树T=(Vt,Et),Kr ...
- Mac对文件夹加密
一.打开磁盘工具 电脑左上角文件->新建映像->基于文件夹新建映像->选择相对应的文件夹,进行aes加密->输入加密密码 然后保存文件就好了
- 如何理解scanf(“%d %d”,a,b)==2和scanf(“%d”,a)=1【摘抄笔记ψ(._. )>】
scanf 函数有一个返回值,0表示接受输入失败,1表示接受输入成功. while(scanf("%d",&x)==1) 的意思就是: 当接收输入变量x的值成功的时候,继续 ...
- 包子类&包子铺类-吃货类&测试类
包子类&包子铺类 资源类:包子类设置包子的属性皮陷包子的状态:有true,没有false package Demo01.WaitAndNotify; /** * 资源类:包子类设置包子的属性 ...