主页 > 开发者资讯

Java数组排序的各种实现方式及示例代码

更新: 2024-10-17 12:11:08   人气:8847
在计算机编程领域,尤其是使用Java语言时,对数据进行有效且高效的排序是一个至关重要的任务。数组作为最基础的数据结构之一,在处理批量有序或无序元素方面发挥着关键作用。本文将深入探讨并提供多种基于Java的数组排序算法及其对应的示例代码。

1. **冒泡排序(Bubble Sort)**
冒泡排序是一种简单直观的比较类排序方法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。直到没有再需要交换,则该次排序完成。

java

public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - i - 1; j++)
if (arr[j] > arr[j + 1]) {
// swap arr[j+1] and arr[i]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}


2. **选择排序(Selection Sort)**

选择排序是每一次从待排记录中选出最小的一个或者最大的一个记录,存放在序列的起始位置,并与未排序区的第一个纪录交换之。

java

public class SelectionSortExample {
public static void selectionsort(int array[]) {
for (int i = 0; i < array.length-1; i++) {
int index=i;
for (int j = i+1; j < array.length ; j++ )
if(array[index]>array[j])
index=j;

/* Swap the found minimum element with the first element of the unsorted part */
int tmp=array[index];
array[index]=array[i];
array[i]=tmp;
}
}
}

3. **插入排序(Insertion Sort)**

插入排序的工作原理类似于打扑克牌:每一张新来的卡片都会被放到正确的位置上以保持手上的卡牌一直是有序状态。

java

public class InsertionSortExample{
public static void insertionSort(int [] numbers){
int size=numbers.length;
for(int step=1;step<size;step++){
int key=numbers[step];
int j=step-1;

while((j>=0)&&(numbers[j]>key)){
numbers[j+1]=numbers[j];
j--;
}
numbers[j+1]=key;
}
}
}

4. **快速排序(QickSort)**

这是一种分治策略的经典应用实例,通过选取基准值划分数组为两部分,一部分的所有数字小于另一部分的所有数字,然后递归调用自身来继续细分这两部分。

java

public class QuickSort {

private void quickSort(int[] nums, int low, int high) {
if(low >= high)
return ;

int pivotIndex = partition(nums,low ,high);
quickSort(nums, low, pivotIndex-1);
quickSort(nums,pivotIndex+1, high);
}

private int partition(int[]nums,int low, int high){
int pivotValue = nums[(low + high)/2];

while(low <= high){
while(nums[low] < pivotValue)
++low ;

while(nums[high] > pivotValue)
--high ;

if(low <= high){
int temporaryPivot = nums[low];
nums[low++] = nums[high];
nums[high--] = temporaryPivot;
}
}
return low;
}

public void sortArray(int[] inputArr){
this.quickSort(inputArr,0,inputArr.length-1 );
}
}

// 使用:
QuickSort qs = new QuickSort();
qs.sortArray(arr);


5. **Arrays.sort()内置函数**

Java还提供了标准库中的` Arrays.sort()` 方法用于直接给对象和原始类型数组排序。此方法内部采用优化过的TimSort排序算法:

java

import java.util.Arrays;

public class ArraySortingDemo {
public static void main(String args[]){
Integer arr[] ={9,-8,76,5,3};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}


总结来说,以上几种只是众多Java数组排序实现方式的一小部分内容,实际开发过程中可以根据具体需求、效率要求以及空间复杂度等因素灵活选用合适的排序算法。同时了解这些基本排序逻辑对于理解更复杂的高级排序技术有着举足轻重的作用。