关于数组的几个小题目-冒泡排序、二分查找、直接选择排序、反转数组

1. 实现冒泡排序算法,对比相邻元素,如果满足条件就叫唤元素值,把较小的元素移动到数组前面,把较大的元素移动到数组的后面,这样较小的元素就逐渐从底部上升到顶部,排到前面了。

public class zuoye14_maopaopaixu {
    public static void main(String[] args){
        int[] array = new int[]{12,45,21,35,65,24,43};
        for(int i=0;i<array.length;i++){
            for(int j=0;j<array.length-1;j++){
                if(array[i]<array[j]){
                    int temp=array[i];
                    array[i]=array[j];
                    array[j]=temp;
                }
            }
        }
        for(int i=0;i<array.length;i++){
            System.out.print(array[i]+" ");
        }
    }
}

2.实现二分查找法。

public class zuoye15_erfenchazhao {
    public static void main(String[] args){
        int[] array = new int[]{12,45,21,35,65,24,43};
        for(int i=0;i<array.length;i++){
            for(int j=0;j<array.length-1;j++){
                if(array[i]<array[j]){
                    int temp=array[i];
                    array[i]=array[j];
                    array[j]=temp;
                }
            }
        }
        int left,mid,right;
        left=0;
        right=array.length-1;
        mid=(left+right)/2;
        while(array[mid]!=45){
            if(45>array[mid]){
                left=mid+1;
            }
            else if(45<array[mid]){
                right=mid-1;
            }
            mid=(left+right)/2;
        }
        System.out.println(mid);
    }
}

3.采用多种算法,模拟摇奖:从1-36中随机抽出8个不重复的数字

import java.util.Arrays;
import java.util.Random;

public class zuoye13_yaojiangsuijishu {
    public static void main(String[] args){
        int[] array = new int[8];                    //定义一个数组来存放摇到的号
        Random a = new Random();
        int s = a.nextInt(36);                       //生成一个随机数
        if(s!=0)array[0]=s;                          //将第一个随机数给0号位
        for(int i=1;i<8;i++){                        //利用循环去生成其它的随机数
                s=a.nextInt(36);
            for(int j=0;j<i;j++){                    //利用循环去进行比较
                if(array[j]!=s && s!=0){             //与之前的每个序号位上的值进行比较
                    array[i]=s;
                }
                else{
                    i--;
                    break;
                }
            }
        }
        Arrays.sort(array);
        for(int i=0;i<array.length;i++){
            System.out.print(array[i]+" ");
        }
    }
}

4、直接选择排序,就是将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换。

public class zuoye18_zhijiepaixu {
    public static void main(String[] args){
        int[] array = new int[]{2,4,5,123,55,667,32,356};
        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;
                }
            }
            int temp=array[array.length-i];
            array[array.length-i]=array[index];
            array[index]=temp;
        }
        for(int k:array){System.out.println(k);}
    }
}

5、反转数组,将数组进行反转,把数组最后一个元素与第一个元素替换,倒数第二个与第二个元素替换,依此类推,直到把所有数组元素反转替换。

public class zuoye19_fanzhuanshuzu {
    public static void main(String[] args){
        int[] array = new int[]{123,45,66,33,68,24,89};
        int temp;
        int len = array.length;
        for(int i=0;i<len/2;i++){
            temp=array[i];
            array[i]=array[len-1-i];
            array[len-1-i]=temp;
        }
        for(int j:array){System.out.print(j+" ");}
     }
}

时间: 2024-10-05 06:59:22

关于数组的几个小题目-冒泡排序、二分查找、直接选择排序、反转数组的相关文章

第三节 java 数组(循环遍历、获取数组的最值(最大值和最小值)、选择排序、冒泡排序、练习控制台输出大写的A)

获取数组的最值(最大值和最小值) 思路: 1.获取最值需要进行比较,每一次比较都会有一个较大的值,因为该 值不确定,需要一个变量进行临储. 2.让数组中的每一个元素都和这个变量中的值进行比较,如果大于了 变量中的值,就用该变量记录较大值. 3.当所有的元素都比较完成,那么该变量中存储的就是数组中最大值 例子://最大值 int arr[] = {1,2,3,4,5,}; int max = arr[0]; for(int a=0;a<arr.length;a++){ {if(arr[a])>a

九种经典排序算法详解(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序,计数排序,桶排序,基数排序)

综述 最近复习了各种排序算法,记录了一下学习总结和心得,希望对大家能有所帮助.本文介绍了冒泡排序.插入排序.选择排序.快速排序.归并排序.堆排序.计数排序.桶排序.基数排序9种经典的排序算法.针对每种排序算法分析了算法的主要思路,每个算法都附上了伪代码和C++实现. 算法分类 原地排序(in-place):没有使用辅助数据结构来存储中间结果的排序**算法. 非原地排序(not-in-place / out-of-place):使用了辅助数据结构来存储中间结果的排序算法 稳定排序:数列值(key)

排序(上):冒泡排序、插入排序和选择排序

如何分析一个排序算法? 分析一个排序算法的三要素:排序算法的执行效率.排序算法的内存消耗以及排序算法的稳定性. 排序算法的执行效率 对于排序算法执行效率的分析,一般是从以下三个方面来衡量: 最好情况.最坏情况.平均情况时间复杂度 时间复杂度的系数.常数.低阶 比较次数和交换(或移动)次数 第1.2点在之前的复杂度分析中我们已经讲过了,第3点会在这一节以及接下来的章节中详细讲解. 这一节和下一节讲的都是基于比较的排序算法.基于比较的排序算法的执行过程,会涉及两种操作,一种是元素比较大小,另一种是元

冒泡排序算法和简单选择排序算法的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]]; } } }

斐波那契数列,冒泡排序,选择排序,数组去重

斐波那契数列: 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以<斐波纳契数列季刊>为名的一份数学杂志,用于专门刊载这方面的研究成果. 这个数列从第二项开始,每一项都等于前两项之和. function abc(num){

算法与数据结构总结1 二分查找与旋转排序数组

一. 二分搜索(Binary Search)模板及其理解 1.通用模板,解决start, end, mid, <(<=), >(>=)等问题 http://www.lintcode.com/en/problem/binary-search/ class Solution { public: /** * @param nums: The integer array. * @param target: Target number to find. * @return: The firs

三个典型的经典算法冒泡排序,插入排序,选择排序

稍微轻松点,彻底理解了一下这三个算法,当然只是部分,还有什么改良版,具体分类等等,不过下周有事,先把这几个典型的弄明白,老规矩,看代码说问题 /** * Created by fanyafeng on 2015/5/8/0008. */ public class ALGTest { public static void main(String[] args) { System.out.println("排序算法"); System.out.println("---------

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

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

java 冒泡排序 二分查找

下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这个数比这个数组的最小值大,最大值小,但是数组中不包含这个数,代码如下: package com.jll.sort; public class ErFenSort {    static int[] unsorted;    public static void main(String[] args)