• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
neverlandly
博客园    首页    新随笔    联系   管理    订阅  订阅

Groupon面经Prepare: Sort given a range && Summary: Bucket Sort

首先是如何sort一个只有0和1的数组,要求inplace. follow up是告诉一个range,如何在O(N)时间内sort好

两个pointer可解

 1 package Sorting;
 2 import java.util.*;
 3 
 4 public class InplaceSorting {
 5     public void sorting(int[] arr) {
 6         if (arr==null || arr.length==0) return;
 7         int l=0, r=arr.length-1;
 8         while (l < r) {
 9             while (l<r && arr[l]==0) {
10                 l++;
11             }
12             while (l<r && arr[r]==1) {
13                 r--;
14             }
15             if (l == r) return;
16             swap(arr, l, r);
17         }
18     }
19     
20     public void swap(int[] arr, int l, int r) {
21         int temp = arr[l];
22         arr[l] = arr[r];
23         arr[r] = temp;
24     }
25     
26 
27     /**
28      * @param args
29      */
30     public static void main(String[] args) {
31         // TODO Auto-generated method stub
32         InplaceSorting sol = new InplaceSorting();
33         int[] arr = new int[]{0,1,1,0,1,0,0,1};
34         sol.sorting(arr);
35         System.out.println(Arrays.toString(arr));
36     }
37 
38 }

BucketSort可解

Best case performance: O(n + k), where k is the size of buckets or the range between min and max in original array

Worst case performance: O(n^2)

Aver case performance: O(n + k)

Worst case space: O(n*k)

BucketSort works as follows:

1. set up an array of initially empty buckets(should know the range)

2. Go over the original array, put each object in its bucket

3. Sort each non-empty bucket.

4. visit the buckets in order and put all elements back into the original array.

 

 1 package Sorting;
 2 
 3 import java.util.Arrays;
 4 
 5 public class Solution {
 6     public void bucketSort(int[] arr, int min, int max) {
 7         int[] bucket = new int[max-min+1];
 8         for (int elem : arr) {
 9             bucket[elem-min]++;
10         }
11         int cur = 0;
12         for (int i=0; i<bucket.length; i++) {
13             while (bucket[i] > 0) {
14                 arr[cur++] = i+min;
15                 bucket[i]--;
16             }
17         }
18     }
19 
20     /**
21      * @param args
22      */
23     public static void main(String[] args) {
24         // TODO Auto-generated method stub
25         Solution sol = new Solution();
26         int[] arr = new int[]{5,6,9,10,4,11,5,7,6,11};
27         sol.bucketSort(arr, 4, 11);
28         System.out.println(Arrays.toString(arr));
29     }
30 
31 }

 

posted @ 2016-02-04 01:27  neverlandly  阅读(372)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3