java中数组常见的排序问题整理
- 格式:docx
- 大小:10.90 KB
- 文档页数:2
java 经典笔试算法题一、排序算法1. 实现一个基于Java的快速排序算法。
答:快速排序是一种常用的排序算法,其核心思想是分治法。
首先选择一个基准元素,将数组分成两部分,一部分小于基准元素,一部分大于基准元素。
然后递归地对这两部分继续进行快速排序,直到整个数组有序。
2. 实现一个稳定的冒泡排序算法。
答:冒泡排序是一种简单的排序算法,通过重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
稳定的冒泡排序算法是指在排序过程中,相同元素的相对位置不会改变。
3. 实现一个选择排序算法。
答:选择排序是一种简单直观的排序算法。
其工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
二、字符串操作算法1. 实现一个函数,将一个字符串反转。
答:可以使用StringBuilder类的reverse()方法来实现字符串的反转。
2. 实现一个函数,将一个字符串中的所有大写字母转换为小写字母,其余字符保持不变。
答:可以使用String类的replaceAll()方法和toLowerCase()方法来实现。
3. 实现一个函数,将一个字符串按空格分割成单词数组,并删除空字符串和null字符串。
答:可以使用split()方法和Java 8的流来处理。
三、数据结构算法1. 实现一个单向链表,并实现插入、删除、查找和打印链表的功能。
答:单向链表是一种常见的数据结构,可以通过定义节点类和链表类来实现。
插入、删除、查找和打印链表的功能可以通过相应的方法来实现。
2. 实现一个二叉搜索树(BST),并实现插入、查找、删除节点的功能。
答:二叉搜索树是一种常见的数据结构,它具有唯一的高度特性。
插入、查找和删除节点的功能可以通过相应的方法来实现,如左旋、右旋、递归等。
3. 实现一个哈希表(HashMap),并实现插入、查找和删除键值对的功能。
答:HashMap是一种基于哈希表的映射数据结构,它通过哈希码的方式将键映射到对应的值上。
java数组排序方法Java数组排序方法在Java编程中,数组是一种非常常见的数据结构,而排序是对数组中元素进行重新排列以达到某种有序状态的常用操作。
Java提供了多种排序算法和方法,本文将介绍一些常用的Java数组排序方法。
1. 冒泡排序法冒泡排序是一种简单直观的排序算法,其基本思想是通过相邻元素的比较和交换来实现排序。
具体实现过程如下:- 从数组的第一个元素开始,比较相邻的两个元素,如果顺序不正确,则交换它们的位置。
- 继续比较下一个相邻元素,直到最后一个元素。
此时,最大的元素已经排在了最后的位置。
- 重复以上步骤,直到所有元素都排好序。
2. 快速排序法快速排序是一种高效的排序算法,其基本思想是通过递归地将数组分成较小和较大的两个子数组,再分别对两个子数组进行排序,最终将整个数组排序。
具体实现过程如下:- 选择一个基准元素,将数组分成两部分,其中一部分的元素都小于基准元素,另一部分的元素都大于基准元素。
- 对两个子数组递归地进行快速排序。
- 将两个排好序的子数组合并起来,即可得到最终的排序结果。
3. 插入排序法插入排序是一种简单直观的排序算法,其基本思想是将数组分成已排序和未排序两部分,每次从未排序部分取出一个元素,并将其插入到已排序部分的正确位置。
具体实现过程如下:- 从数组的第二个元素开始,将其与前面的已排序部分逐个比较,找到合适的位置插入。
- 继续取出下一个未排序元素,重复以上步骤,直到所有元素都插入到已排序部分。
4. 选择排序法选择排序是一种简单直观的排序算法,其基本思想是从数组中选择最小的元素,将其与数组的第一个元素交换位置,然后从剩余的未排序部分选择最小的元素,将其与数组的第二个元素交换位置,依此类推。
具体实现过程如下:- 从数组的第一个元素开始,依次遍历数组中的每个元素。
- 在剩余的未排序部分中选择最小的元素,将其与当前元素交换位置。
- 重复以上步骤,直到所有元素都排好序。
5. 归并排序法归并排序是一种稳定的排序算法,其基本思想是将数组递归地分成较小的子数组,再将子数组归并成一个有序的大数组。
Java排序总结日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。
冒泡排序是一种简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
代码/*** 冒泡法排序<br/>* <li>比较相邻的元素。
如果第一个比第二个大,就交换他们两个。
</li>* <li>对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。
在这一点,最后的元素应该会是最大的数。
</li>* <li>针对所有的元素重复以上的步骤,除了最后一个。
</li>* <li>持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
</li>** @param numbers* 需要排序的整型数组*/public static void bubbleSort(int[] numbers) {int temp; // 记录临时中间值int size = numbers.length; // 数组大小for(int i = 0; i < size - 1; i++) {for(int j = i + 1; j < size; j++) {if(numbers[i] < numbers[j]) { // 交换两数的位置temp = numbers[i];numbers[i] = numbers[j];numbers[j] = temp;}}}}快速排序使用分治法策略来把一个序列分为两个子序列。
代码/*** 快速排序<br/>* <ul>* <li>从数列中挑出一个元素,称为“基准”</li>* <li>重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。
javaint数组排序方法(二)Java中数组排序方法1. 冒泡排序(Bubble Sort)•基本思想:通过反复比较相邻的元素并交换,使得最大(或最小)的元素逐渐移动到数组的末尾。
•步骤:1.从数组的第一个元素开始,比较相邻的两个元素。
2.如果前一个元素大于后一个元素,则交换它们的位置。
3.继续比较下一个相邻元素,重复前两步操作。
4.直到没有任何一对元素需要交换位置。
2. 插入排序(Insertion Sort)•基本思想:将数组分为已排序和未排序两部分,初始时已排序部分只有第一个元素。
然后从第二个元素开始遍历未排序部分,每次将当前元素插入到已排序部分的正确位置上。
•步骤:1.从数组的第二个元素开始,将其暂存为当前元素。
2.将当前元素与已排序部分的最后一个元素比较。
3.如果当前元素小于已排序部分的最后一个元素,则将最后一个元素向后移一位。
4.继续比较前一个已排序元素,直到找到合适的位置插入当前元素。
5.将当前元素插入到合适的位置上。
3. 选择排序(Selection Sort)•基本思想:将数组分为已排序和未排序两部分,初始时已排序部分为空。
每次从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。
•步骤:1.找出未排序部分中的最小元素。
2.将最小元素与未排序部分的第一个元素交换位置。
3.更新已排序部分和未排序部分的边界。
4.重复前三步操作,直到排序完成。
4. 快速排序(Quick Sort)•基本思想:选择一个元素作为基准,将数组分成左右两部分,左边部分的元素小于等于基准,右边部分的元素大于基准。
然后递归地对左右两部分进行快速排序。
•步骤:1.选择一个基准元素。
2.分区过程:将数组中小于基准的元素移到基准的左边,将大于基准的元素移到基准的右边。
3.递归地对基准的左右两部分进行快速排序。
5. 归并排序(Merge Sort)•基本思想:将数组依次分割成最小单元,然后将相邻的最小单元合并并排序,最终得到有序的数组。
⽤Java实现常见的8种内部排序算法⼀、插⼊类排序插⼊类排序就是在⼀个有序的序列中,插⼊⼀个新的关键字。
从⽽达到新的有序序列。
插⼊排序⼀般有直接插⼊排序、折半插⼊排序和希尔排序。
1. 插⼊排序1.1 直接插⼊排序/*** 直接⽐较,将⼤元素向后移来移动数组*/public static void InsertSort(int[] A) {for(int i = 1; i < A.length; i++) {int temp = A[i]; //temp ⽤于存储元素,防⽌后⾯移动数组被前⼀个元素覆盖int j;for(j = i; j > 0 && temp < A[j-1]; j--) { //如果 temp ⽐前⼀个元素⼩,则移动数组A[j] = A[j-1];}A[j] = temp; //如果 temp ⽐前⼀个元素⼤,遍历下⼀个元素}}/*** 这⾥是通过类似于冒泡交换的⽅式来找到插⼊元素的最佳位置。
⽽传统的是直接⽐较,移动数组元素并最后找到合适的位置*/public static void InsertSort2(int[] A) { //A[] 是给定的待排数组for(int i = 0; i < A.length - 1; i++) { //遍历数组for(int j = i + 1; j > 0; j--) { //在有序的序列中插⼊新的关键字if(A[j] < A[j-1]) { //这⾥直接使⽤交换来移动元素int temp = A[j];A[j] = A[j-1];A[j-1] = temp;}}}}/*** 时间复杂度:两个 for 循环 O(n^2)* 空间复杂度:占⽤⼀个数组⼤⼩,属于常量,所以是 O(1)*/1.2 折半插⼊排序/** 从直接插⼊排序的主要流程是:1.遍历数组确定新关键字 2.在有序序列中寻找插⼊关键字的位置* 考虑到数组线性表的特性,采⽤⼆分法可以快速寻找到插⼊关键字的位置,提⾼整体排序时间*/public static void BInsertSort(int[] A) {for(int i = 1; i < A.length; i++) {int temp = A[i];//⼆分法查找int low = 0;int high = i - 1;int mid;while(low <= high) {mid = (high + low)/2;if (A[mid] > temp) {high = mid - 1;} else {low = mid + 1;}}//向后移动插⼊关键字位置后的元素for(int j = i - 1; j >= high + 1; j--) {A[j + 1] = A[j];}//将元素插⼊到寻找到的位置A[high + 1] = temp;}}2. 希尔排序希尔排序⼜称缩⼩增量排序,其本质还是插⼊排序,只不过是将待排序列按某种规则分成⼏个⼦序列,然后如同前⾯的插⼊排序⼀般对这些⼦序列进⾏排序。
Java数组排序原理详解1. 引言排序是计算机科学中最基本且常见的操作之一。
在日常生活中,我们经常需要对一组数据进行排序,以便更好地进行查找、比较和分析。
在Java中,数组是最常用的数据结构之一,因此了解和掌握Java数组排序的原理是非常重要的。
本文将详细解释Java数组排序的基本原理,包括常见的排序算法和它们的实现原理。
我们将从简单的排序算法开始,逐步介绍更高级的算法,并分析它们的时间复杂度和空间复杂度。
同时,我们还将介绍Java中的排序工具类和如何使用它们进行数组排序。
2. 常见的排序算法在Java中,有许多不同的排序算法可供选择。
这些算法可以根据其实现原理和性能特征进行分类。
下面我们将介绍几种常见的排序算法。
2.1 冒泡排序冒泡排序是最简单的排序算法之一。
它的基本思想是通过不断交换相邻的元素,将较大的元素逐渐“冒泡”到数组的末尾。
冒泡排序的实现过程如下: 1. 从数组的第一个元素开始,依次比较相邻的两个元素。
2. 如果前一个元素大于后一个元素,则交换它们的位置。
3. 继续向后比较,直到将最大的元素“冒泡”到数组的末尾。
4. 重复上述步骤,直到整个数组排序完成。
冒泡排序的时间复杂度为O(n^2),其中n是数组的长度。
由于冒泡排序需要不断交换元素的位置,因此它的性能较差,不适用于大规模数据的排序。
2.2 选择排序选择排序是另一种简单的排序算法。
它的基本思想是在未排序的部分中选择最小(或最大)的元素,并将其放置在已排序部分的末尾。
选择排序的实现过程如下: 1. 从数组中选择最小(或最大)的元素,并将其与第一个元素交换位置。
2. 在剩余的未排序部分中,选择最小(或最大)的元素,并将其与第二个元素交换位置。
3. 重复上述步骤,直到整个数组排序完成。
选择排序的时间复杂度也为O(n^2),其中n是数组的长度。
尽管选择排序的性能也不是最好的,但它比冒泡排序稍微快一些,因为它只需要进行一次交换操作。
java数组的面试题在面试中,Java数组是经常被问到的话题之一。
面试官通常会通过一些问题来考察候选人对Java数组的理解和应用能力。
本文将介绍一些常见的Java数组面试题,并提供详细的解答和示例代码。
问题一:如何声明和初始化一个一维数组?回答:声明和初始化一维数组可以通过以下方式实现:```int[] arr = new int[5]; //声明并初始化一个长度为5的int类型数组double[] arr2 = {1.2, 2.3, 3.4}; //声明并初始化一个包含3个double 类型元素的数组```问题二:如何访问和修改数组元素?回答:可以通过索引来访问和修改数组元素,数组索引从0开始。
示例代码如下:```int[] arr = {1, 2, 3};System.out.println(arr[0]); //输出数组第一个元素的值,即1arr[0] = 10; //修改数组第一个元素的值为10System.out.println(arr[0]); //输出修改后的数组第一个元素的值,即10```问题三:如何遍历数组并打印所有元素?回答:可以使用for循环来遍历数组,并通过System.out.println()方法打印数组元素。
示例代码如下:```int[] arr = {1, 2, 3};for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}```问题四:如何计算数组的长度?回答:可以使用数组的.length属性来获取数组的长度。
示例代码如下:```int[] arr = {1, 2, 3};System.out.println(arr.length); //输出3,表示数组的长度为3```问题五:如何使用Arrays类对数组进行排序?回答:可以使用Arrays类提供的sort()方法对数组进行排序。
Java中数组常见的⼏种排序⽅法! 数组的定义: int[] arr = new int[5];int[] arr1 = {1,2,3,4,5};long[] arr2 = new long[6];String[] strs = new String[5];Person[] ps = new Person[5]; 数组的操作: int[] arr = {45, 34, 53, 43};Arrays.sort(arr);System.out.println(Arrays.toString(arr));// ⼆分搜索法(使⽤之前需要先排序)int i = Arrays.binarySearch(arr, 34);System.out.println(i);int[] newArr = Arrays.copyOf(arr, 7);int[] newArr1 = Arrays.copyOfRange(arr, 1, 3);System.out.println(Arrays.toString(newArr));System.out.println(Arrays.toString(newArr1));int j = Arrays.binarySearch(arr, 1, 3, 34);System.out.println(j); 冒泡排序: int[] arr = {23,12,48,56,45}; int temp = -1;for(int i=0;i<arr.length;i++) {for(int j=i+1;j<arr.length;j++) {if(arr[i]>arr[j]) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}System.out.println(Arrays.toString(arr)); 直接选择排序: int[] arr = {23,12,48,56,45}; for(int i=0;i<arr.length;i++) {int tem = i;for(int j=i;j<arr.length;j++) {if(arr[j] < arr[tem]) {tem = j;}}int temp1 = arr[i];arr[i] = arr[tem];arr[tem] = temp1;}System.out.println(Arrays.toString(arr)); 反转排序: int[] arr = {23,12,48,56,45}; for(int i=0;i<arr.length / 2;i++) {int temp = arr[i];arr[i] = arr[arr.length-i-1];arr[arr.length-i-1] = temp;}System.out.println(Arrays.toString(arr))。
数组转集合、集合转数组、字符串数组与int型、long型数组等的转换以及排序问题==================类型转换================== 在项⽬中经常会遇到数组转集合、集合转数组、数组之间类型转换等操作1.数组转集合为了实现把⼀个数组转换成⼀个ArrayList,很多Java程序员会使⽤如下的代码:String str[] = {"1","2","3"};List<String> strings = Arrays.asList(str); Arrays.asList确实会返回⼀个ArrayList对象,但是该类是Arrays类中⼀个私有静态内部类,⽽不是常见的java.util.ArrayList 类。
这个java.util.Arrays.ArrayList类具有 set(),get(),contains()等⽅法,但是不具有任何添加或移除元素的任何⽅法。
因为该类的⼤⼩(size)是固定的。
如果添加元素是会报错的(但是如果转换后的集合只是⽤来进⾏查询不进⾏增加元素也可以这样转换):String str[] = {"1","2","3"};List<String> strings = Arrays.asList(str);strings.add("eee");报错如下:Exception in thread "main" ng.UnsupportedOperationExceptionat java.util.AbstractList.add(AbstractList.java:148)at java.util.AbstractList.add(AbstractList.java:108)at Test.test1(Test.java:31)at Test.main(Test.java:24)为了创建出⼀个真正的ArrayList,代码应该如下所⽰:(这种⽅法创建的集合可以进⾏集合的增加)String str[] = {"1","2","3"};List<String> strings = new ArrayList<String>(Arrays.asList(str));strings.add("4");System.out.println(strings);更加⾼效的代码如下:String str[] = {"1","2","3"};List<String> strings = new ArrayList<String>(str.length);Collections.addAll(strings,str);strings.add("4");System.out.println(strings);2.集合转数组(1)错误演⽰很多⼈习惯下⾯⽤法:List<String> strings = new ArrayList<String>();String[] objects = (String[]) strings.toArray();编译通过,运⾏报错如下:Exception in thread "main" ng.ClassCastException: [ng.Object; cannot be cast to [ng.String;at Test.test1(Test.java:32)at Test.main(Test.java:26)学过JVM的应该知道上⾯的意思是Object数组不能转变为String数组。
数组各种排序算法和复杂度分析Java排序算法1)分类:插⼊排序(直接插⼊排序、希尔排序)交换排序(冒泡排序、快速排序)选择排序(直接选择排序、堆排序)归并排序分配排序(箱排序、基数排序)所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均速度最快:快速排序不稳定:快速排序,希尔排序,堆排序。
2)选择排序算法的时候要考虑数据的规模、数据的类型、数据已有的顺序。
⼀般来说,当数据规模较⼩时,应选择直接插⼊排序或冒泡排序。
任何排序算法在数据量⼩时基本体现不出来差距。
考虑数据的类型,⽐如如果全部是正整数,那么考虑使⽤桶排序为最优。
考虑数据已有顺序,快排是⼀种不稳定的排序(当然可以改进),对于⼤部分排好的数据,快排会浪费⼤量不必要的步骤。
数据量极⼩,⽽起已经基本排好序,冒泡是最佳选择。
我们说快排好,是指⼤量随机数据下,快排效果最理想。
⽽不是所有情况。
3)总结:——按平均的时间性能来分:时间复杂度为O(nlogn)的⽅法有:快速排序、堆排序和归并排序,其中以快速排序为最好;时间复杂度为O(n2)的有:直接插⼊排序、起泡排序和简单选择排序,其中以直接插⼊为最好,特别是对那些对关键字近似有序的记录序列尤为如此;时间复杂度为O(n)的排序⽅法只有,基数排序。
当待排记录序列按关键字顺序有序时,直接插⼊排序和起泡排序能达到O(n)的时间复杂度;⽽对于快速排序⽽⾔,这是最不好的情况,此时的时间性能蜕化为O(n2),因此是应该尽量避免的情况。
简单选择排序、堆排序和归并排序的时间性能不随记录序列中关键字的分布⽽改变。
——按平均的空间性能来分(指的是排序过程中所需的辅助空间⼤⼩):所有的简单排序⽅法(包括:直接插⼊、起泡和简单选择)和堆排序的空间复杂度为O(1);快速排序为O(logn ),为栈所需的辅助空间;归并排序所需辅助空间最多,其空间复杂度为O(n );链式基数排序需附设队列⾸尾指针,则空间复杂度为O(rd )。
——排序⽅法的稳定性能:稳定的排序⽅法指的是,对于两个关键字相等的记录,它们在序列中的相对位置,在排序之前和经过排序之后,没有改变。
详解Javasort()数组排序(升序和降序)我们在学习 Java 的过程中肯定会遇到对数组进⾏升序或降序等排序问题,本节主要介绍如何实现 Java 数组的升序和降序。
Java 语⾔使⽤ Arrays 类提供的 sort() ⽅法来对数组进⾏排序。
升序使⽤ java.util.Arrays 类中的 sort() ⽅法对数组进⾏升序分为以下两步:1. 导⼊ java.util.Arrays 包。
2. 使⽤ Arrays.sort(数组名) 语法对数组进⾏排序,排序规则是从⼩到⼤,即升序。
假设在数组 scores 中存放了 5 名学⽣的成绩,现在要实现从低到⾼排列的功能。
在这⾥使⽤ Arrays.sort() ⽅法来实现,具体代码如下:public static void main(String[] args) {// 定义含有5个元素的数组double[] scores = new double[] { 78, 45, 85, 97, 87 };System.out.println("排序前数组内容如下:");// 对scores数组进⾏循环遍历for (int i = 0; i < scores.length; i++) {System.out.print(scores[i] + "\t");}System.out.println("\n排序后的数组内容如下:");// 对数组进⾏排序Arrays.sort(scores);// 遍历排序后的数组for (int j = 0; j < scores.length; j++) {System.out.print(scores[j] + "\t");}}如上述代码所⽰,要对⼀个数组进⾏升序排列,只需要调⽤ Arrays.sort() ⽅法即可。
运⾏后的输出结果如下所⽰。
java中数组打乱排序的方法在Java中,有多种方式可以用来打乱数组的顺序。
其中最常用的几种方法包括使用Collections.shuffle()方法、使用Random类的nextInt()方法生成随机数和使用Fisher-Yates算法等。
1. 使用Collections.shuffle()方法这种方法是最简单的一种打乱数组顺序的方式。
可以直接利用Collections类提供的shuffle()方法实现数组的随机排序。
以下是示例代码:List<Integer> list = Arrays.asList(arr);Collections.shuffle(list);list.toArray(arr);其中,arr是待打乱排序的数组。
2. 使用Random类的nextInt()方法生成随机数另一种方式是使用Random类生成随机数,并将其作为数组索引来打乱数组的顺序。
以下是示例代码:Random random = new Random();for (int i = arr.length - 1; i > 0; i--) {int j = random.nextInt(i + 1);int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}这种方式生成的随机数可以保证不重复,是比较常用的一种打乱数组顺序的方法。
3. 使用Fisher-Yates算法Fisher-Yates算法也是一种常用的打乱数组顺序的方法,它是一种原地算法,即不需要使用额外的空间。
以下是示例代码:Random random = new Random();for (int i = arr.length - 1; i > 0; i--) {int j = random.nextInt(i + 1);int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}这种方法比较快速,并且不需要额外的空间,所以比较适合大数组进行随机排序。
java数组排序,java数组排序的⼏种⽅法java数组排序详细讲解前⾔:⼏种常⽤的JAVA数组排序⽅法的整合。
java数组排序法⼀:Arrays.sort()Arrays.sort()排序⽅法在java中是最简单且最常⽤的排序⽅法1. int []arr1= {45,34,59,55};2. Arrays.sort(arr1);//调⽤⽅法排序即可java数组排序法⼆:冒泡排序简单来说,冒泡排序就是重复地⾛访过要排序的数列,⼀次⽐较两个元素,如果他们的顺序错误就把他们交换过来。
⾛访数列的⼯作是重复地进⾏直到没有再需要交换,也就是说该数列已经排序完成。
1. //array[]为待排序数组,n为数组长度2. void BubbleSort(int array[], int n)3. {4. int i, j, k;5. for(i=0; i<n-1; i++)6. for(j=0; j<n-1-i; j++)7. {8. if(array[j]>array[j+1])9. {10. k=array[j];11. array[j]=array[j+1];12. array[j+1]=k;13. }14. }15. }java数组排序法三:选择排序先找到最⼩元素所在位置的索引,然后将该元素与第⼀位上的元素进⾏交换。
1. int arr3[]= {23,12,48,56,45};2. for(int i=0;i<arr3.length;i++) {3. int tem=i;4. //将数组中从i开始的最⼩的元素所在位置的索引赋值给tem5. for(int j=i;j<arr3.length;j++) {6. if(arr3[j]<arr3[tem]) {7. tem=j;8. }9. }10. //上⾯获取了数组中从i开始的最⼩值的位置索引为tem,利⽤该索引将第i位上的元素与其进⾏交换11. int temp1=arr3[i];12. arr3[i]=arr3[tem];13. arr3[tem]=temp1;14. }java数组排序法四:反转排序将原数组按逆序排列1. //将数组第i位上的元素与第arr.length-i-1位上的元素进⾏交换2. int []arr4={23,12,48,56,45};3. for(int i=0;i<arr4.length/2;i++) {4. int tp=arr4[i];5. arr4[i]=arr4[arr4.length-i-1];6. arr4[arr4.length-i-1]=tp;7. }java数组排序法五:直接插⼊排序1. int []arr5={23,12,48,56,45};2. for (int i = 1; i < arr5.length; i++) {3. for (int j = i; j > 0; j--) {4. if (arr5[j - 1] > arr5[j]) {//⼤的放后⾯5. int tmp = arr5[j - 1];6. arr5[j - 1] = arr5[j];7. arr5[j] = tmp;8. }9. }10. }。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
java 中数组常见的排序问题整理
2016/03/13 0
span >
1.选择排序:选择排序(Selection sort)是一种简单直观的排序算法。
它的工作原
理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法。
如图所示:数组array 有5 个元素
首先,array[0]与array[1]比较大小,如果array[0] array[1],则将两元素互换位置,
然后再将array[0]与array[2]进行比较,一次进行下去,当第一轮循环完成,则
array[0]是数组中最小的元素。
然后开始拿array[1]与array[2]进行比较,依次下去,
比较到最后即可。
程序代码实现如下:
public void SelectionSort(int[] array){for(int i=0;i array.length-1;i++){for(int j=i+1;j
array.length;j++){int temp;if(array[i] array[j]){temp =
array[i];array[i]=array[j];array[j]=temp;}}}}2.冒泡排序:它重复地走访过要排序的数
列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
下面用一张图来详细说明冒泡的原理。
如图:
数组array 有五个元素,int[] array={7,5,12,9,2};
第一步还是和选择排序一样,先是array[0]和array[1]进行比较,如果array[0]
array[1],两个元素互换位置,即array[0]=5,array[1]=7;第二步,array[1]和array[2]进
行比较大小,array[1] array[2],位置不变;第三步,array[2]和array[3]比较,array[2]
array[3],位置互换;array[3]与array[4]比较,array[3] array[4],位置互换,第一轮循环
结束,我们会发现,数组的最后一个元素是数组中最大的。
第一轮循环完成后的数组变成如下图所示:
接下来继续又从array[0]和array[1]开始比较,重复下去。
第一轮比较得出了最。