`
开心的笔记
  • 浏览: 4617 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

初识java算法

阅读更多

引言:这是我对常用算法的初步理解,如有不足敬请指正,谢谢!

1.【选择排序法】
 初始数组   【63 4  24 1  3  15  】
 第一次排序 【4  24 1  3  15 】  63
 第二次排序 【4  1  3  15 】 24  63
 第三次排序 【4  1  3  】 15 24  63
 第四次排序 【1  3  】 4  15 24  63
 第五次排序 【1  】 3  4  15 24  63
 特点:每一次从待排序的数据中选出最小(或最大)的一个元素,顺序放到已经排好序的数列最后,直达全部排完!
 使用:如果数组有重复值,可选择该排序方法,因为遇到重复相等的值不会做任何处理,如果程序允许重复,该方法数据交换次数少,效率高!
   程序:
   private int[] array = new int[10];
   protected void do_button_actionPerformed() {
        // 创建随机数对象
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
        // 初始化数组元素,生成50以内的随机数
        array[i] = random.nextInt(50);   
        }
   }
   //核心算法  
   protected void do_button_1_actionPerformed() {
        int index;
        for (int i = 1; i < array.length; i++) {
            index = 0;
            for (int j = 1; j <= array.length - i; j++) {
                if (array[j] > array[index]) {
                    index = j;// 查找最大值
                }
            }
            // 交换在位置array.length-i和index(最大值)两个数
            int temp = array[array.length - i];
            array[array.length - i] = array[index];
            array[index] = temp;
         }
   }


2.【冒泡排序】
定义:基本思想是对比相邻的元素值,如果满足条件就交换元素,把较小的移动到前面,这样数组就像气泡一样从底部上升到顶部。
特点:比较的次数依排序轮数递减,因为每次都会确定一个最大值!
  程序:
  private int[] array = new int[10];  
  protected void do_button_actionPerformed(ActionEvent e) {
      Random random = new Random();
      for (int i = 0; i < array.length; i++) {
           array[i] = random.nextInt(50);
      }
  } 
  //核心算法  
  protected void do_button_1_actionPerformed(ActionEvent e) {
      for (int i = 1; i < array.length; i++) { // 长度为N的数组,循环轮数N-1,每次找出一个最大值
         // 比较相邻两个元素,较大的数往后冒泡
         for (int j = 0; j < array.length - i; j++) {
             if (array[j] > array[j + 1]) {
                  int temp = array[j];// 把第一个元素值保持到临时变量中
                  array[j] = array[j + 1];// 把第二个元素值保存到第一个元素单元中
                  array[j + 1] = temp;// 把临时变量也就是第一个元素原值保持到第二个元素中
              }    
            }
        }


3.【快速排序】
定义:对冒泡排序的一种改进,基本思想,通过一趟排序把要排序的数据分成2部分,其中一部分比参考数(通常选取每个部分的第1个数)小的,另一部分都是比参考数大的,对每个部分进行递归处理,直到每个部分只有一个元素即完成排序.
例子:
          初始数组:  49  38  65  97  76  13  27  49
        第一次排序: {27  38  13} 49{76 97 65 49}
    对左边序列排序: {13}27{38} 49{76 97 65 49}
        对右边排序:                {65 49}76{97}
    对右边继续排序:                {49}65
    完成排序的序列: {13}27{38}49 49}65 76{97}
核心算法:
    private int[] array = new int[10];
    protected void do_button_actionPerformed(ActionEvent e) {
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextInt(90);        
        }  
    } 
    //调用快速排序的方法,传入初始参数
    protected void do_button_1_actionPerformed(ActionEvent e) {
        quickSort(array, 0, array.length - 1);
    }
    //快速排序的逻辑排序相对复杂一些
    private void quickSort(int sortarray[], int lowIndex, int highIndex) {
        int lo = lowIndex;// 记录最小索引
        int hi = highIndex;// 记录最大索引
        int mid;// 记录分界点元素
        if (highIndex > lowIndex) {
            // 确定中间分界点元素值,sortarray[]数组
            mid = sortarray[(lowIndex + highIndex) / 2];
            while (lo <= hi) {
                while ((lo < highIndex) && (sortarray[lo] < mid))
                    ++lo;// 确定不大于分界元素值的最小索引
                while ((hi > lowIndex) && (sortarray[hi] > mid))
                    --hi;// 确定大于分界元素值的最大索引
                if (lo <= hi) {// 如果最小与最大索引没有重叠
                    swap(sortarray, lo, hi);// 交换两个索引的元素
                    ++lo;// 递增最小索引
                    --hi;// 递减最大索引
                }
            }
            if (lowIndex < hi)// 递归排序没有未分解元素
                quickSort(sortarray, lowIndex, hi);
            if (lo < highIndex)// 递归排序没有未分解元素
                quickSort(sortarray, lo, highIndex);
        }
    }  
    private void swap(int swapArray[], int i, int j) {
        // 交换数组元素
        int temp = swapArray[i];
        swapArray[i] = swapArray[j];
        swapArray[j] = temp;
    }
   
4.【直接插入排序】
定义: 将一个记录插入到有序数列中,使得到的新数列依然有序,插入一个新的元素会使得元素后面的数字向后移动一位.
      例子:2,8,7,5,9,6
      获取第一个元素:     2{ 8,7,5,9,6}
      依次插入后面的元素: 2,8{ 7,5,9,6}  
      依次插入后面的元素: 2,7,8{ 5,9,6}  
      依次插入后面的元素: 2,5,7,8{ 9,6}  
      依次插入后面的元素: 2,5,7,8 ,9{6}
      依次插入后面的元素: 2,5,6,7,8 ,9
核心算法:
    private int[] array = new int[10];   
    protected void do_button_actionPerformed(ActionEvent e) {
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
           array[i] = random.nextInt(90);
        }
    }
    protected void do_button_1_actionPerformed(ActionEvent e) {
        int tmp;// 定义临时变量
        int j;
        for (int i = 1; i < array.length; i++) {
           tmp = array[i];// 保存临时变量
           for (j = i - 1; j >= 0 && array[j] > tmp; j--) {
              array[j + 1] = array[j];// 数组元素交换
          }
           array[j + 1] = tmp;// 在排序位置插入数据
     }
  }

 

分享到:
评论

相关推荐

    初识A寻路算法

    标题中的“初识A*寻路算法”表明我们要探讨的是计算机科学中的一种路径搜索算法——A*(A-star)算法。A*算法是Dijkstra算法的优化版本,广泛应用于游戏开发、地图导航、网络路由等领域,它通过引入启发式信息来实现...

    JAVA语言技术初识

    Java语言技术初识 Java,作为一种革命性的编程语言,由Sun Microsystems公司的James Gosling等人于1991年创立,并于1995年正式发布。它的核心特性是跨平台能力,这得益于Java虚拟机(JVM),使得“编写一次,到处...

    算法电子书 初识ACM090216.zip

    《算法电子书 初识ACM090216》是针对计算机科学中的一个重要领域——算法设计与分析的一本入门级电子教材。ACM,全称美国计算机学会(Association for Computing Machinery),是全球计算机科学领域的权威组织,其...

    java第四章数组初识排序

    【Java数组初识与排序】 在Java编程语言中,数组是一种非常重要的数据结构,它允许我们在同一时间存储多个相同类型的数据。本章将详细介绍数组的概念、应用、排序算法以及多维数组。 ### 1. 数组概念 1.1 为什么...

    数据结构与算法 全 数据结构与算法全 Java

    #### 一、初识算法 **1.1 什么是算法?** 算法是指解决问题的一系列步骤或指令集。它是一种清晰、有限的指导过程,用于完成特定任务或解决特定类型的问题。一个好的算法应当具备明确性、可行性、输入/输出特性和有...

    java课程学什么

    阶段一,初识Java世界。这一阶段主要涉及Java的基础知识和面向对象编程(OOP)概念。学员将学习Java的基本语法,如变量、数据类型、运算符、控制结构等。对象的创建、封装、继承和多态是OOP的核心,也是Java编程的...

    java技术合集

    Java技术合集是一个涵盖Java编程语言众多核心技术的资源集合,非常适合初学者和进阶者进行系统性的学习。这个合集可能包含了大量的文档、教程、...无论是初识Java的新人还是希望巩固技能的开发者,都可以从中受益匪浅。

    决战JAVA大后端-解决JavaWeb后端疑难杂症 JAVA后端高级开发技术专题课程 大牛亲授

    初识java;目录中文件数:6个 ├─class001.rar ├─eclipse-jee-photon-R-win32-x86_64.zip ├─jdk-8u121-windows-i586.exe ├─jdk-8u121-windows-x64.exe ├─数据类型和运算符.ppt ├─笔记.docx (2)\10.实用类 ...

    java文章合集2

    初识Java 9模块化编程.pdf 区块链难理解?200行代码教你写一个自己的区块链!.pdf 十个问答助你了解 Redis 高可用架构及 Redis 运维.pdf 后Kubernetes时代,带你系统梳理K8S 12大关键特性.pdf 容器如“衣服”,而...

    最新Java面试题

    #### 第一章 初识Java - **Java跨平台原理**:Java的跨平台特性主要得益于字节码文件(`.class`文件)和Java虚拟机(JVM)。Java程序编译成字节码文件后,由不同平台上的JVM解释执行这些字节码文件,从而实现了“一...

    《Java语言程序设计》源代码

    5. **chapter2**:初识Java,可能包含基本语法,如变量声明、数据类型、运算符、流程控制(if、for、while)等,以及简单的函数和方法。 6. **chapter36**:可能涉及的是输入/输出流的更深入话题,如对象序列化或...

    Java思维导图xmind文件+导出图片

    初识分布式架构与意义 如何把应用从单机扩展到分布式 大型分布式架构演进过程 分布式架构设计 主流架构模型-SOA架构和微服务架构 领域驱动设计及业务驱动规划 分布式架构的基本理论CAP、BASE以及其应用 什么...

    初识Flink.pdf

    首先,Flink的处理速度非常快,能够以极高的速度处理数据密集型和迭代任务,这得益于其基于内存的数据流处理能力和深度集成的迭代处理算法。其次,Flink的可靠性与可扩展性非常强,拥有自己的内存管理组件、序列化...

    java面试宝典

    初识Java部分,主要介绍了Java的发展历程、应用领域以及与其他编程语言的区别,帮助读者建立对Java的基本认知。 接下来,书中逐步深入到Java语法的核心,如数据类型和运算符。这部分内容涵盖了基本数据类型、引用...

    数据结构和算法学习参考

    #### 一、初识算法 ##### 1.1 什么是算法? **定义**:在数学和计算机科学领域,算法是指一系列有限的严谨指令,这些指令通常用于解决一类特定的问题或者执行某种计算。算法是解决问题的一种明确步骤,它可以接受...

    Java基础知识整理

    #### 一、初识Java 1. **Java的由来** - Java语言最初由Sun Microsystems公司于1995年推出,它是由James Gosling领导的一个团队设计并实现的。Java的设计目标是实现面向网络的、跨平台的应用程序编程语言。 2. **...

    data_mining:一些数据挖掘算法的实现

    在这个“data_mining:一些数据挖掘算法的实现”项目中,我们可以推测作者提供了一些用Java语言实现的数据挖掘算法。Java作为一种广泛使用的编程语言,因其跨平台性、高效性和丰富的库支持,常被用于大数据处理和分析...

Global site tag (gtag.js) - Google Analytics