import java.util.*;
public class SortingTest {
public static void main(String[] args){
int[] arrNoSorted = {89,56,32,15,46,69,54};
// 在进行排列之前先将数组中的值依次显示出来。
System.out.print("The array before sorting \n -> [\'");
for(int x=0;x<arrNoSorted.length;x++){
if(x!=arrNoSorted.length-1){
System.out.print(arrNoSorted[x]+"\', '");
}else{
System.out.print(arrNoSorted[x]+"\']");
}
};
System.out.print("\n\n");
// 对数组进行排序。
bubbleSorting(arrNoSorted);
// 将排序后数组的值依次显示出来。
System.out.print("The array was sorted \n -> [\'");
for(int x=0;x<arrNoSorted.length;x++){
if(x!=arrNoSorted.length-1){
System.out.print(arrNoSorted[x]+"\', '");
}else{
System.out.print(arrNoSorted[x]+"\']");
}
};
System.out.print("\n\n");
// 使用JAVA自带的类进行排序。
Arrays.sort(arrNoSorted);
System.out.print("Array sorted by JAVA \n -> [\'");
for(int x=0;x<arrNoSorted.length;x++){
if(x!=arrNoSorted.length-1){
System.out.print(arrNoSorted[x]+"\', '");
}else{
System.out.print(arrNoSorted[x]+"\']");
}
};
}
/* 将能够实现排序的方法单独写出来,为了能够重用。
* 能够实现数组排列的算法有很多种,
* 更多的种类可以在百度上查一下。
*
* 选择排序-方法1:
* (1)将数据第一个位置的值与之后每个位置的值进行比较,需要注意最后一个位置的值不需要与任何值进行比较,因此在数据长度的后面-1。
* (2)如果第二个位置的值小于第一个位置的值,那么就要对其进行位置的交换。
* (在这个算法当中,每一次比较了之后,如果第二个位置的值小于第一个位置的值的话,就需要进行一次位置的交换。可以参考在选择排序-方法2中如何避免。)
*/
public static void selectSorting(int[] arrToSorting){
for (int i = 0; i < arrToSorting.length-1; i++) {
for (int j = i+1; j < arrToSorting.length; j++) {
if (arrToSorting[j]<arrToSorting[i]) {
swap(arrToSorting,i,j);
}
}
}
}
/* 选择排序-方法2
* 与方法1不同的是,使用了利用临时变量来在数组中找最小值的思想。
* (1)先声明了一个变量,用来存放比较之后最小的值。再声明一个变量,用来记录最小值所在的数组中位置的角标。
* (2)遍历整个数组,最后早出数组中的最小值。
* (3)如果第一个位置的数与所找出的最小值不同,则需要将它与最小值进行交换,此时就用使用到之前声明过的最小值的角标。
*/
public static void selectSorting2(int[] arrToSorting) {
for (int i = 0; i < arrToSorting.length-1; i++) {
int minValue = arrToSorting[i];//声明存在最小值的变量
int minValueIndex = i;//声明遍历到的数组中最小值的角标,为了在遍历之后的swap
//遍历从该位置开始的整个数组。寻找数组中的最小值。
for (int j = i+1; j < arrToSorting.length; j++) {
if (minValue > arrToSorting[j]) {
minValue = arrToSorting[j];
minValueIndex = j;
}
}
//将遍历之后所获得的最小值的角标与i值进行比较,如果一样的话则说明该位置上的值已经是最小值,
//如果不一样的话,说明遍历后的最小值比该位置上的值要小,因此就需要对其位置进行交换。
if (i!=minValueIndex) {
swap(arrToSorting,i,minValueIndex);
}
}
}
/* 气泡排序(Bubble Sort)
* (1)气派排序的核心是将通过不断的比较将最大值推到数组的后面,反复进行这样的过程,就能够实现排序。
* (2)需要注意的是循环的次数,尤其是内循环时不过不-1的话,会出现overbound错误。
*/
public static void bubbleSorting(int[] arrToSorting) {
for (int i = 0; i < arrToSorting.length-1; i++) {
for (int j = 0; j < arrToSorting.length-1; j++) {
if (arrToSorting[j]>arrToSorting[j+1]) {
swap(arrToSorting,j,j+1);
}
}
}
}
/* 实现数据位置交换的方法。
* 注意:在数据中位置交换的时候,需要3个参数,分别是:数组的名字,要进行交换的两个角标。
*/
public static void swap(int[] arrToSwap,int a, int b){
int temp = arrToSwap[a];
arrToSwap[a]=arrToSwap[b];
arrToSwap[b]=temp;
}
}
JAVA小练习-排序算法
最新推荐文章于 2023-09-10 17:17:34 发布