欢迎访问宙启技术站
智能推送

最简单易懂的java数组排序方法整理

发布时间:2023-05-16 09:26:25

Java 数组排序是 Java 程序员最常用到的功能之一,它可以帮助我们快速把一组数据按照一定的规则排序,整理出的方法都是以字母顺序为主,理解起来非常简单,并且排序的效率也比较高,下面我们一起来看看具体的方法。

1. 冒泡排序

冒泡排序是一种简单的排序算法,它通过不断比较相邻的两个元素,将较大的元素往上移动,最终得到一个有序的数组。冒泡排序的时间复杂度为 O(n^2)。

例如,我们要对下面这个数组排序:

int[] nums = {5,3,8,6,4};

使用冒泡排序的方法,我们会先遍历整个数组,将 个元素(5)和第二个元素(3)比较,发现 3 比 5 小,因此将两者交换,数组变为 {3,5,8,6,4}。然后再将第二个元素(5)和第三个元素(8)进行比较,发现它们已经符合排序规则,不需要交换。以此类推,直到最后一个元素都被排序完毕,得到的数组就是 {3,4,5,6,8}。

下面是冒泡排序的实现代码:

public static void bubbleSort(int[] nums){

    int temp;

    for(int i=0;i<nums.length-1;i++){

        for(int j=0;j<nums.length-1-i;j++){

            if(nums[j]>nums[j+1]){

                temp = nums[j];

                nums[j] = nums[j+1];

                nums[j+1] = temp;

            }

        }

    }

}

2. 选择排序

选择排序是一种简单的排序算法,它每次在一个未排序的部分中找到最小的元素,然后将它放到已排序部分的末尾,直到所有元素都被排序完毕。选择排序的时间复杂度为 O(n^2)。

例如,我们要对下面这个数组排序:

int[] nums = {5,3,8,6,4};

使用选择排序的方法,我们会先遍历整个数组,找到最小的元素(3),并将它放到数组的 个位置。然后再从剩余的未排序部分中找到最小的元素(4),将它放到数组的第二个位置。以此类推,直到所有元素都被排序完毕,得到的数组就是 {3,4,5,6,8}。

下面是选择排序的实现代码:

public static void selectionSort(int[] nums){

    int minIndex, temp;

    for(int i=0;i<nums.length-1;i++){

        minIndex = i;

        for(int j=i+1;j<nums.length;j++){

            if(nums[j]<nums[minIndex]){

                minIndex = j;

            }

        }

        temp = nums[i];

        nums[i] = nums[minIndex];

        nums[minIndex] = temp;

    }

}

3. 插入排序

插入排序是一种简单的排序算法,它每次将一个未排序的元素插入到已排序部分的正确位置,直到所有元素都被排序完毕。插入排序的时间复杂度为 O(n^2)。

例如,我们要对下面这个数组排序:

int[] nums = {5,3,8,6,4};

使用插入排序的方法,我们会将 个元素(5)当作已排序部分,然后从第二个元素(3)开始逐个插入到已排序部分的正确位置。插入时,我们从已排序部分的末尾开始查找,如果发现插入的元素比已排序部分的某个元素要小,那么就将这个元素向后移动一位,以便为插入元素腾出位置。最后,将插入元素放到正确位置即可。以此类推,直到所有元素都被排序完毕,得到的数组就是 {3,4,5,6,8}。

下面是插入排序的实现代码:

public static void insertionSort(int[] nums){

    int temp, j;

    for(int i=1;i<nums.length;i++){

        temp = nums[i];

        j = i-1;

        while(j>=0 && nums[j]>temp){

            nums[j+1] = nums[j];

            j--;

        }

        nums[j+1] = temp;

    }

}

4. 快速排序

快速排序是一种高效的排序算法,它采用了分治的思想,将一个大问题分成若干个小问题解决。快速排序的时间复杂度为 O(nlogn)。

例如,我们要对下面这个数组排序:

int[] nums = {5,3,8,6,4};

使用快速排序的方法,我们会先选择一个基准元素(比如数组的 个元素),然后将数组中小于基准元素的元素放到左边,大于基准元素的元素放到右边。这个过程叫做分区。然后,将左右两个部分递归地使用相同的方法排序。最终得到的数组就是 {3,4,5,6,8}。

下面是快速排序的实现代码:

public static void quickSort(int[] nums, int left, int right){

    if(left>=right){

        return;

    }

    int i = left, j = right, pivot = nums[left];

    while(i<j){

        while(i<j && nums[j]>=pivot){

            j--;

        }

        if(i<j){

            nums[i++] = nums[j];

        }

        while(i<j && nums[i]<pivot){

            i++;

        }

        if(i<j){

            nums[j--] = nums[i];

        }

    }

    nums[i] = pivot;

    quickSort(nums, left, i-1);

    quickSort(nums, i+1, right);

}

5. 归并排序

归并排序是一种稳定的排序算法,它将一个数组分成两个同样大小的部分,对这两个部分分别排序,然后将它们合并起来。归并排序的时间复杂度为 O(nlogn)。

例如,我们要对下面这个数组排序:

int[] nums = {5,3,8,6,4};

使用归并排序的方法,我们会先将数组分成两个部分,分别为 {5,3,8} 和 {6,4}。然后,对这两个部分递归地使用相同的方法排序。

在合并这两个部分时,我们将两个部分头部的元素进行比较,取出较小的元素放到结果数组中,直到其中一个部分已被遍历完毕。最后,将剩余的元素全部放到结果数组中。得到的数组就是 {3,4,5,6,8}。

下面是归并排序的实现代码:

public static void mergeSort(int[] nums, int left, int right){

    if(left>=right){

        return;

    }

    int mid = (left+right)/2;

    mergeSort(nums, left, mid);

    mergeSort(nums, mid+1, right);

    int i = left, j = mid+1, k = 0;

    int[] temp = new int[right-left+1];

    while(i<=mid && j<=right){

        if(nums[i]<=nums[j]){

            temp[k++] = nums[i++];

        }else{

            temp[k++] = nums[j++];

        }

    }

    while(i<=mid){

        temp[k++] = nums[i++];

    }

    while(j<=right){

        temp[k++] = nums[j++];

    }

    for(int m=0;m<temp.length;m++){

        nums[left+m] = temp[m];

    }

}

总结:

这里我们介绍了几种 Java 数组排序的方法,包括冒泡排序、选择排序、插入