模式:设计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)--简单排序的更多相关文章

  1. 【Java数据结构与算法】简单排序、二分查找和异或运算

    简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...

  2. Java数据结构和算法(五)--希尔排序和快速排序

    在前面复习了三个简单排序Java数据结构和算法(三)--三大排序--冒泡.选择.插入排序,属于算法的基础,但是效率是偏低的,所以现在 学习高级排序 插入排序存在的问题: 插入排序在逻辑把数据分为两部分 ...

  3. Java数据结构和算法(三)--三大排序--冒泡、选择、插入排序

    三大排序在我们刚开始学习编程的时候就接触过,也是刚开始工作笔试会遇到的,后续也会学习希尔.快速排序,这里顺便复习一下 冒泡排序: 步骤: 1.从首位开始,比较首位和右边的索引 2.如果当前位置比右边的 ...

  4. JAVA数据结构和算法 3-简单排序

    排序中的两种基本操作是比较和交换.在插入排序中还有移动. 冒泡排序:两两比较相邻元素,如果较大数位于较小数前面,则交换: 每一趟遍历将一个最大的数移到序列末尾,共遍历N-1趟. 如果执行完一趟之后没有 ...

  5. Java数据结构与算法(2) - ch03排序(冒泡、插入和选择排序)

    排序需要掌握的有冒泡排序,插入排序和选择排序.时间为O(N*N). 冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移. 插入排序: 从排序过程的中间开始(程 ...

  6. Java数据结构和算法(二)--队列

    上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...

  7. Java数据结构和算法 - 简单排序

    Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...

  8. Java数据结构和算法(九)——高级排序

    春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...

  9. Java数据结构和算法 - 高级排序

    希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插 ...

  10. Java数据结构和算法 - 堆

    堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...

随机推荐

  1. vba 数组判断与转换

    Private Function CountArr(arr)'*****************************'计算数组是几维数组'***************************** ...

  2. C语言条件语句中调用函数并赋值时的一个小坑

    在C语言中,如果在条件语句中赋值,一定要注意符号优先级的问题,比较符号是比赋值符号先执行的.如果同时还调用函数,并将返回值赋给变量,更容易产生错误. 看下面的代码: int increase(int ...

  3. CCS选择器 选择器优先级 选择器常见属性

    目录 CSS前戏 1.css语法结构 2.css注释语法 3.引入css的多种方式 CSS基本选择器 1.标签选择器 2.类选择器 3.id选择器 4.通用选择器 CSS组合选择器 1.后代选择器(空 ...

  4. 周结之json补充、正则re模块、hashlib模块、logging模块

    周结 目录 周结 json补充 正则表达式 re模块 第三方模块的下载 request模块 办公自动化openpyxl模块 hashlib加密模块 subprocess模块 logging日志模块 j ...

  5. [OpenCV实战]42 数码单反相机的技术细节

    在这篇文章中,我们将说明数码单反相机DSLR(Digital Single Lens Reflex Camera)的各个技术方面.本文将说明焦距(focal length),f-stop,景深(dep ...

  6. (9)go-micro微服务Redis配置

    目录 一 go-redis介绍 二 go-redis安装 三 redis初始化连接 四 存储mail邮件 五 存储token 六 最后 一 go-redis介绍 Redis(Remote Dictio ...

  7. react,vue中的key有什么作用?(key的内部原理)

    1.虚拟DOM中的key的作用: key是虚拟dom对象的标识,当状态中的数据发生变化时,vue会根据新数据生成新的虚拟dom,随后vue进行新的虚拟dom与旧的虚拟dom的差异比较. 2.比较规则 ...

  8. Python从零到壹丨图像增强及运算:图像掩膜直方图和HS直方图

    摘要:本章主要讲解图像直方图相关知识点,包括掩膜直方图和HS直方图,并通过直方图判断黑夜与白天,通过案例分享直方图的实际应用. 本文分享自华为云社区<[Python从零到壹] 五十二.图像增强及 ...

  9. Grafana 系列文章(六):Grafana Explore 中的日志

    ️URL: https://grafana.com/docs/grafana/latest/explore/logs-integration/#labels-and-detected-fields D ...

  10. 【开源】libserial_parse_text:命令行解析的基础库

    借助五一假期,写了一个命令行解析的基础库,一般可用于串口命令解析.TCP命令解析等等. 具有以下几种特点: 不涉及到具体硬件, 纯软件协议,与具体硬件分离. 支持不定长命令行,逐个字符解码,可以支持不 ...