java实现快排和堆排序

快排的Java实现

直接以第一个元素为分界元素,下面是直接Java代码实现

 public class QuickSort {

        public static void main(String[] args) {
            int[] nums = {17, 8, 100, 120, 122, 6, 3, 9};
            quickSort(nums);
            for (int num : nums) {
                System.out.print(" " + num);
            }
        }

        public static void quickSort(int[] nums) {
            quickSort(nums, 0, nums.length - 1);
        }

        public static void quickSort(int[] nums, int start, int end) {
            if (start >= end) {
                return;
            }
            int low = start;
            int high = end;
            int splitKey = nums[start];
            while (start < end) {
                while (start < end && nums[end] >= splitKey) {
                    end--;
                }
                nums[start] = nums[end];
                while (start < end && nums[start] <= splitKey) {
                    start++;
                }
                nums[end] = nums[start];
            }
            nums[end] = splitKey;
            quickSort(nums, low, end - 1);
            quickSort(nums, end + 1, high);
        }

    }

堆排序的Java实现

以从小到大排序为例,堆排主要包括两个过程:
1、构建最大堆(以数组为堆的数据结构)
2、替换当前堆顶元素和堆尾元素,忽略已经有序的堆尾,重新调整堆,不断重复(其实还是不断get&&remove堆顶最大或最小值放在有序队列中的过程)

堆排还是比较简单的,视频:https://www.bilibili.com/video/av55290486?from=search&seid=16303431171103441937
直接上Java实现代码:

    public class HeapSort {
        public static void main(String[] args) {
            int[] nums = {17, 8, 100, 120, 122, 6, 3, 9};
            heapSort(nums);
            for (int num : nums) {
                System.out.print(" " + num);
            }
        }

        public static void heapSort(int[] nums) {
            if (nums == null || nums.length <= 1) {
                return;
            }
            int len = nums.length;
            for (int i = len / 2 - 1; i >= 0; i--) {
                adjustHeap(nums, len, i);
            }
            for (int i = len - 1; i >= 0; i--) {
                swap(nums, i, 0);
                adjustHeap(nums, i, 0);
            }
        }

        public static void adjustHeap(int[] nums, int size, int index) {
            int largest = index;
            int left = index * 2 + 1;
            int right = index * 2 + 2;
            if (left < size && nums[left] > nums[largest]) {
                largest = left;
            }
            if (right < size && nums[right] > nums[largest]) {
                largest = right;
            }
            if (largest != index) {
                swap(nums, largest, index);
                adjustHeap(nums, size, largest);
            }
        }

        public static void swap(int[] a, int i, int j) {
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
        
    }
发布了54 篇原创文章 · 获赞 28 · 访问量 4216

猜你喜欢

转载自blog.csdn.net/qq_37174887/article/details/103148866