二分算法,选择,冒泡排序算法

package com.zlhj.logic.doc;

import java.util.Arrays;

/** * 类的作用: * * @ClassName : Tser * @Author : liyang * @Date : 2019/1/19  17:00 * @Version 1.0 *//* * 冒泡排序 */public class Tser {    public static void main(String[] args) {        int[] arr = {5, 4, 7, 78, 12, 1, 9, 19, 32, 23};

Tser tser = new Tser();        String maop = tser.maopao(arr);        System.out.println("冒泡排序后的数组为:" + maop);        String scort = tser.SelectionSort(arr);        System.out.println("选择排序后的数组为:" + scort);

int[] arr1 = {5, 4, 7, 78, 12, 9, 19, 32, 23};        int search1 = tser.halfSearch(arr1, 5);        int search2 = tser.halfSearch(arr1, 4);        int search3 = tser.halfSearch(arr1, 7);        int search4 = tser.halfSearch(arr1, 78);        int search5 = tser.halfSearch(arr1, 12);        int search7 = tser.halfSearch(arr1, 9);        int search8 = tser.halfSearch(arr1, 19);        int search9 = tser.halfSearch(arr1, 32);        int search10 = tser.halfSearch(arr1, 23);        System.out.println("["+search1 + "," + search2 + "," + search3 + "," + search4 + "," + search5 +   "," + search7 +  "," + search8 + "," + search9 +  "," + search10+"]");    }

//二分查找法(折半查找法)    public  int halfSearch(int[] arr,int number){        int min =0;  //最小下标        int max =arr.length-1;   //最大下标        int mid = 0;  //中间下标        while (min<max){            //没找到,更新范围继续找            mid = (min+max)/2;            if (arr[mid]>number){   //number在mid的左边                max = mid-1;  //改变最大下标            }else if(arr[mid]<number){  //number在mid的右边                min = mid+1;  //改变最小下标            }else{                return  mid;            }        }        return -1;    }

/**     * 功能描述:冒泡排序     */    public String maopao(int[] arr) {        for (int i = 0; i < arr.length - 1; i++) {//外层循环控制排序趟数 。i从0开始循环所以要-1            for (int j = 0; j < arr.length - 1 - i; j++) {//内层循环控制每一趟排序多少次。j从0开始循环所以要-1在减去i 的长度                if (arr[j] > arr[j + 1]) {                    int temp = arr[j];                    arr[j] = arr[j + 1];                    arr[j + 1] = temp;                }            }        }        String str = Arrays.toString(arr);//使用的数组——string中的方法        return str;    }

/**     * 选择排序     */    public String SelectionSort(int[] arr) {        /*        a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。        也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。        基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序)       b) 简单选择排序的基本思想:       给定数组:int[] arr={里面n个数据};       第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,       将它与arrr[1]交换;第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,       将它与r[2]交换;以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。         */        //选择排序的优化        for (int i = 0; i < arr.length - 1; i++) {// 做第i趟排序            int k = i;            for (int j = k + 1; j < arr.length; j++) {// 选最小的记录                if (arr[j] < arr[k]) {                    k = j; //记下目前找到的最小值所在的位置                }            }            //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换            if (i != k) {  //交换a[i]和a[k]                int temp = arr[i];                arr[i] = arr[k];                arr[k] = temp;            }        }        String str = Arrays.toString(arr);//使用的数组——string中的方法        return str;    }

}

原文地址:https://www.cnblogs.com/liyang6/p/10292692.html

时间: 2024-10-29 09:12:23

二分算法,选择,冒泡排序算法的相关文章

Java中数组的几个常用算法:插入算法,删除算法,冒泡排序算法

前言: 在Java中我们常常会用数组,提到数组就不得不介绍数组中常用到的几个算法. 有插入算法,删除算法,冒泡排序算法等. 在学习这几个数组的算法前,我们先来了解一下关于数组一些基本知识. 数组的基本知识: 数组的定义:数组(Array)是相同数据类型的数据的有序集合. 数组是引用数据类型. 数组的三个特点: [1]数组长度是确定.数组一旦申请完空间,长度不能发生变化,用length属性访问. [2]数组的元素都是同一数据类型. [3]数组是有序的 .每个元素通过下标/索引标记,索引从0开始.

Java学习资料-Java常用算法-选择排序算法

ChooseSort源程序public class ChooseSort { private static void ChooseSort (int [] a){  for(int i = 0; i < a.length; i++){   //对数组循环,假设数据排在前面的元素总比后面的小,然后与后面的数据进行比较   int k = i;   for(int j = i+1; j <a.length; j++){//对数据遍历,寻找最小的数据元素的数组下标    if(a[j]<a[k

java:快速排序算法与冒泡排序算法

 Java:快速排序算法与冒泡算法 首先看下,冒泡排序算法与快速排序算法的效率: 如下的是main方法: public static void main(String[] args) { //快速排序算法测试 int[] qArray = new int[100000]; for (int i = 0; i < 100000; i++){ qArray[i] = (int) (Math.random() * 100000); } long beforeQ = System.currentTi

每天一算法 -- (冒泡排序算法)

原文地址:http://www.cnblogs.com/shen-hua/p/5422676.html 一.原理 比较两个相邻的元素,将值大的元素交换至右端. 二.思路 依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后.重复第一趟步骤,直至全部排序完成. 举例说明:要排序数组:int[] arr={6,3,8,2,9,1}; 第一趟排

【排序】选择排序算法

特别说明 对于算法,重在理解其思想.解决问题的方法,思路.因此,以下内容全都假定待排序序列的存储结构为:顺序存储结构. 选择排序思想 选择排序又称为简单选择排序,主要思想描述如下: 01.假设待排序列表为 .选择排序将  划分为由已排序好序的  部分 以及 未排序的  部分: 注意:刚开始时  部分其实可认为只有一个元素,即: 元素 02.每次从  部分中选出最小(或最大)的那个元素,将其放在  的末尾位置: 03.重复02步骤,直到  部分为空为止: 编码参考 简单选择排序是非常简单的一种排序

我的Java开发学习之旅------&gt;Java经典排序算法之冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 一.算法原理 冒泡排序算法的运作如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3.

【基础算法】冒泡排序+二分查找法

1.思考题 (1)有12颗球,1颗是9克,其余的都是10克,怎样在天平上称三次找出9克的那颗质量小的球? 答:第一次:把12颗球分成两半,一半6颗,在天平上称,取质量小的一边: 第二次:把6颗球分成两半,一半三颗,也取质量小的一边: 第三次:取三颗球中任一两颗去称,如果质量相等,那么没有称的那一颗就是质量最小的一颗(9克),如果两颗质量不想等,取质量小的一颗也可以取到. (2)有1024个人,有一个人血液有病毒,而999个人没有病毒,化验一个人的血液需要10分钟,怎么用最短的时间找出有血液病毒的

冒泡排序算法和简单选择排序算法的js实现

之前已经介绍过冒泡排序算法和简单选择排序算法和原理,现在有Js实现. 冒泡排序算法 let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function bubbleSort(data) { for(let i=0;i<data.length-1;i++){ for(let j=0;j<data.length-1-i;j++){ if(data[j]>data[j+1]){ [data[j],data[j+1]]=[data[j+1],data[j]]; } } }

《机器学习实战》之二分K-均值聚类算法的python实现

<机器学习实战>之二分K-均值聚类算法的python实现 上面博文介绍了K-均值聚类算法及其用python实现,上篇博文中的两张截图,我们可以看到,由于K-均值聚类算法中由于初始质心的选取,会造成聚类的局部最优,并不是全局最优,因此,会造成聚类的效果并不理想,为克服K-均值算法收敛于局部最小值的问题,就有了二分K-均值算法. 二分K-均值聚类算法 二分K均值算法是基本K均值算法的直接扩充,其基本思想是:为了得到K个簇,首先将所有点的集合分裂成两个簇,然后从这些簇中选取一个继续分裂,迭代直到产生

k-均值聚类算法;二分k均值聚类算法

根据<机器学习实战>一书第十章学习k均值聚类算法和二分k均值聚类算法,自己把代码边敲边理解了一下,修正了一些原书中代码的细微差错.目前代码有时会出现如下4种报错信息,这有待继续探究和完善. 报错信息: Warning (from warnings module): File "F:\Python2.7.6\lib\site-packages\numpy\core\_methods.py", line 55 warnings.warn("Mean of empty