zoukankan      html  css  js  c++  java
  • 排序算法——数据结构

    代码:

     1     public int[] sortArray(int[] nums) {
     2         if (nums.length == 0 || nums.length == 1)
     3             return nums;
     4         int n = nums.length;
     5         int i, j;
     6         for (i = 1; i < n; i++) {
     7             if (nums[i] < nums[i - 1]) {
     8                 int curr = nums[i];
     9                 for (j = i - 1; j >= 0 && curr < nums[j]; j--) {
    10                     nums[j + 1] = nums[j];
    11                 }
    12                 nums[j + 1] = curr;
    13             }
    14         }
    15         return nums;
    16     }

    代码:

     1 public int[] sortArray(int[] nums) {
     2         if (nums.length == 0 || nums.length == 1)
     3             return nums;
     4         int n = nums.length;
     5         int i, j;
     6         for (i = 1; i < n; i++) {
     7             int left = 0;
     8             int right = i;//右边界取不到
     9             int curr = nums[i];
    10             while (left < right) {
    11                 int mid = (left + right) / 2;
    12                 if (nums[mid] > curr) {
    13                     right = mid;
    14                 } else {
    15                     left = mid + 1;
    16                 }
    17             }
    18             for (j = i - 1; j >= right; j--) {
    19                 nums[j + 1] = nums[j];
    20             }
    21             nums[j + 1] = curr;
    22         }
    23         return nums;
    24     }

     代码:(把插入排序的1变成dk)

     1     public int[] sortArray(int[] nums) {
     2         if (nums.length == 0 || nums.length == 1)
     3             return nums;
     4         int n = nums.length;
     5         int i, j, dk;
     6         for (dk = n / 2; dk >= 1; dk = dk / 2) {
     7             for (i = dk; i < n; i++) {
     8                 if (nums[i] < nums[i - dk]) {
     9                     int curr = nums[i];
    10                     for (j = i - dk; j >= 0 && curr < nums[j]; j -= dk) {
    11                         nums[j + dk] = nums[j];
    12                     }
    13                     nums[j + dk] = curr;
    14                 }
    15             }
    16         }
    17         return nums;
    18     }

     代码:(和图示不一样,代码是冒泡最小)

     1     public int[] sortArray(int[] nums) {
     2         if (nums.length <= 1)
     3             return nums;
     4         for (int i = 0; i < nums.length; i++) {
     5             boolean flag = false;
     6             for (int j = nums.length - 1; j > i; j--) {
     7                 if (nums[j] < nums[j - 1]) {
     8                     flag = true;
     9                     int temp = nums[j];
    10                     nums[j] = nums[j - 1];
    11                     nums[j - 1] = temp;
    12                 }
    13             }
    14             if (!flag)
    15                 return nums;
    16         }
    17         return nums;
    18     }

     代码:

     1     public int[] sortArray(int[] nums) {
     2         if (nums.length <= 1)
     3             return nums;
     4         qsort(nums, 0, nums.length - 1);
     5         return nums;
     6     }
     7 
     8     private void qsort(int[] nums, int leftIndex, int rightIndex) {
     9         if (rightIndex < leftIndex)
    10             return;
    11         int flag = nums[leftIndex];
    12         int left = leftIndex, right = rightIndex;
    13         while (left < right) {
    14             while (right > left && nums[right] >= flag) {
    15                 right--;
    16             }
    17             nums[left] = nums[right];
    18             while (left < right && nums[left] <= flag) {
    19                 left++;
    20             }
    21             nums[right] = nums[left];
    22         }
    23         nums[left] = flag;
    24         qsort(nums, leftIndex, left - 1);
    25         qsort(nums, right + 1, rightIndex);
    26     }

     代码:

     1     public int[] sortArray(int[] nums) {
     2         if (nums.length <= 1)
     3             return nums;
     4         for (int i = 0; i < nums.length; i++) {
     5             int minIndex = i;
     6             int min = nums[i];
     7             for (int j = i + 1; j < nums.length; j++) {
     8                 if (nums[j] < min) {
     9                     minIndex = j;
    10                     min = nums[j];
    11                 }
    12             }
    13             if (minIndex != i) {
    14                 nums[minIndex] = nums[i];
    15                 nums[i] = min;
    16             }
    17         }
    18         return nums;
    19     }

     代码:

     1     public int[] sortArray(int[] nums) {
     2         if (nums.length <= 1)
     3             return nums;
     4         PriorityQueue<Integer> pq = new PriorityQueue<>();
     5         for (int num : nums) {
     6             pq.add(num);
     7         }
     8         for (int i = 0; i < nums.length; i++) {
     9             nums[i] = pq.poll();
    10         }
    11         return nums;
    12     }

     代码:

     1     public int[] sortArray(int[] nums) {
     2         if (nums.length <= 1)
     3             return nums;
     4         mergeSort(nums, 0, nums.length - 1);
     5         return nums;
     6     }
     7 
     8     private void mergeSort(int[] nums, int left, int right) {
     9         if (left < right) {
    10             int mid = (left + right) / 2;
    11             mergeSort(nums, left, mid);
    12             mergeSort(nums, mid + 1, right);
    13             merge(nums, left, mid, right);
    14         }
    15     }
    16 
    17     private void merge(int[] nums, int left, int mid, int right) {
    18         int[] temp = Arrays.copyOf(nums, nums.length);
    19         int p1 = left, p2 = mid + 1, k = left;
    20         while (p1 <= mid && p2 <= right) {
    21             if (nums[p1] <= nums[p2])
    22                 temp[k++] = nums[p1++];
    23             else
    24                 temp[k++] = nums[p2++];
    25         }
    26         while (p1 <= mid) {
    27             temp[k++] = nums[p1++];
    28         }
    29         while (p2 <= right) {
    30             temp[k++] = nums[p2++];
    31         }
    32         System.arraycopy(temp, 0, nums, 0, temp.length);
    33     }

     动态基数排序

    代码:(只用于正数)

     1     public int[] sortArray(int[] nums) {
     2         if (nums.length <= 1)
     3             return nums;
     4         int max = Integer.MIN_VALUE;
     5         for (Integer n : nums) {
     6             max = Math.max(max, n);
     7         }
     8         int bit = 0;
     9         while (max >= Math.pow(10, bit)) {
    10             bit++;
    11         }
    12         for (int i = 0; i < bit; i++) {
    13             ArrayList<ArrayList<Integer>> bucket = new ArrayList<>();
    14             for (int j = 0; j < 10; j++) {
    15                 bucket.add(new ArrayList<>());
    16             }
    17             for (Integer n : nums) {
    18                 int a = (int) (n / Math.pow(10, i));
    19                 int bitnum = a % 10;
    20                 bucket.get(bitnum).add(n);
    21             }
    22             int k = 0;
    23             for (ArrayList<Integer> num : bucket) {
    24                 for (Integer n : num) {
    25                     nums[k++] = n;
    26                 }
    27             }
    28         }
    29         return nums;
    30     }

  • 相关阅读:
    h5手机端禁止缩放问题
    element upload 一次性上传多张图片(包含自定义上传不走action)
    vue开发移动端项目 过渡动画问题
    vue中使用transition标签底部导航闪烁问题
    vue element upload图片 转换成base64
    vue项目 sockjs-node一直报错问题
    获得省市区 二级 三级 四级 五级联动数据地址
    vue项目中引入第三方框架
    element中使用button会刷新一遍页面
    [Java] 字符流 Writer,输出字符数据PrintWriter
  • 原文地址:https://www.cnblogs.com/xym4869/p/8666860.html
Copyright © 2011-2022 走看看