首页 > 其他分享 >数组(三)

数组(三)

时间:2023-09-17 12:02:30浏览次数:34  
标签:index int 数组 array 排序 public

数组排序算法

今日份学习为数组的排序算法。

数组的排序算法分为三种:冒泡排序,直接选择排序以及反转排序。

  • 冒泡排序冒泡排序法在先前的C语言学习中已经有过接触。它的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组面前,把较大的元素移动到数组后面。
    【例】冒泡排序
    ackage SelectSort;

    public class BubbleSort {

    public static void main(String[] args) {
    int [] array= {63,4,24,1,5,8};
    SelectSort sorter=new SelectSort();
    sorter.sort(array);
    }
    public void sort (int[] array) {
    int index;
    for(int i=1;i<array.length;i++) {
    index=0;
    for(int j=1;j<array.length -i;j++) {
    if(array[i]>array[index]) {
    index=j;
    }
    }
    int temp=array[array.length-i];
    array[array.length-i]=array[index];
    array[index]=temp;
    }
    showArray(array);
    }
    public void showArray(int [] array) {
    for(int i:array) {
    System.out.print(">"+i);
    }
    System.out.println();
    }


    }
  • 直接选择排序直接排序的基本思想:不是交换相邻元素,而是把满足条件的元素与指定的排序位置元素交换,这样排序好的位置逐渐扩大,直至整个数组都变成已排序好的格式。
    【例】直接排序
    public class SelectSort {

    public static void main(String[] args) {
    int[] array= {63,4,25,78};
    SelectSort sorter=new SelectSort();
    sorter.sort(array);
    }
    public void sort(int[] array) {
    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;
    }
    showArray(array);
    }
    public void showArray(int[] array) {
    for (int i:array) {
    System.out.print(">"+i);
    }
    System.out.println();
    }

    }
  • 反转排序

反转排序的基础思想:把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换。

(反转排序是对数组两边元素进行替换,所以只需要循环数组长度的半数次)

【例】反转排序

public class ReverseSort {


public static void main(String[] args) {

int[] array= {10,20,30,40,50};

ReverseSort sorter=new ReverseSort();

sorter.sort(array);

}

public void sort(int[] array) {

System.out.println("数组原有内容:");

showArray(array);

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;

}

System.out.println("数组反转后内容:");

showArray(array);

}

public void showArray(int[] array) {

for(int i:array) {

System.out.print("\t"+i);

}

System.out.println();

}


}

标签:index,int,数组,array,排序,public
From: https://blog.51cto.com/u_15966010/7500702

相关文章

  • C语言之[数组]篇
    前言牛牛又和大家见面了,本篇牛牛要讲的内容是c语言中有关数组的内容。欢迎大家一起学习,共同进步。@TOC数组通过前面所学到的知识,我们了解到,当我们需要使用一些变量的时候,我们可以通过创建变量来使用它,但是,有的时候我们需要使用很多个同类型的变量,那样一个个创建是否显得太过繁琐?......
  • 代码随想录算法训练营-回溯算法-2|55. 跳跃游戏、45. 跳跃游戏 II、1005. K 次取反后
    55. 跳跃游戏1.跳跃的覆盖范围。这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!2. 贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。时间复杂度:O(n)空间复杂度:O(1)1classSolution:2defca......
  • 2023-09-16:用go语言,给你一个整数 n 和一个在范围 [0, n - 1] 以内的整数 p , 它们表示
    2023-09-16:用go语言,给你一个整数n和一个在范围[0,n-1]以内的整数p,它们表示一个长度为n且下标从0开始的数组arr,数组中除了下标为p处是1以外,其他所有数都是0。同时给你一个整数数组banned,它包含数组中的一些位置。banned中第i个位置表示arr[banned[i......
  • 2023-09-16:用go语言,给你一个整数 n 和一个在范围 [0, n - 1] 以内的整数 p , 它们表示
    2023-09-16:用go语言,给你一个整数n和一个在范围[0,n-1]以内的整数p,它们表示一个长度为n且下标从0开始的数组arr,数组中除了下标为p处是1以外,其他所有数都是0。同时给你一个整数数组banned,它包含数组中的一些位置。banned中第i个位置表示arr[banned[i]]=......
  • 35-列表-元素删除的3种方式-删除本质是数组元素拷贝
        删除和增加本质就是数组元素拷贝       ......
  • leet code 删除有序数组中的重复项 I II
    26.删除有序数组中的重复项80.删除有序数组中的重复项II总结反思这两个题目,虽然难度程度一个是简单,一个是中等,都不是特别难。但是都没有解决。因为这两道题目都是运用双指针解决的,证明自己对双指针的掌握程度还不是很熟练。反思:为什么没有解出来?又或者,经过一段时间之后是否能够......
  • 数组(二)
    数组(二)今日份学习为数组的基本操作。分为以下几个部分:遍历数组,填充数组元素,替换数组元素,对数组进行排序以及复制数组。遍历数组通常遍历数组是通过使用for循环来实现的。需注意的是,遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。【例】呈梯形输出二维数......
  • Java---数组
    学完之后需要实现这两个问题:#生成六个1-33之间的随机数,要求不重复+特殊号码(生成彩票)#数组扩容:先定义一个十个长度的数组,写一个方法用于向数组里面存值,每次只存入一个,反复的调用存值的这个方法,当存入的值超过十个以后,数组长度自动扩充用于存放后面的数据。创建数组本质上还......
  • MFC动态数组CArray
             ......
  • 【代码随想录算法训练营第二天】977.有序数组的平方、209.长度最小的子数组 、59.螺旋
    Day2-数组2023.9.15Leetcode977有序数组的平方给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。初解我还是不能想到暴力解法之外的,对某个问题的最优复杂度也没有概念。就算提示我是用指针,我也想不到思路。现在我知......