oracle数据库看不懂,看不懂这个BUCKET的个数?

SQL> exec dbms_stats.gather_table_stats(user,'TESTA',method_opt=>'FOR ALL COLUMNS SIZE 6'); --频率直方图~

PL/SQL 过程已成功完成。

SQL> select TABLE_NAME, COLUMN_NAME, NUM_DISTINCT, NUM_BUCKETS, HISTOGRAM

2    from user_tab_col_statistics

3   where table_name = 'TESTA'

4     and column_name = 'ID'

5  /

TABLE_NAME                     COLUMN_NAME          NUM_DISTINCT NUM_BUCKETS HISTOGRAM

------------------------------ -------------------- ------------ ----------- ---------------

TESTA                          ID                              6           6 FREQUENCY

SQL> SELECT TABLE_NAME, COLUMN_NAME, ENDPOINT_NUMBER, ENDPOINT_VALUE

2    FROM USER_TAB_HISTOGRAMS

3   WHERE TABLE_NAME = 'TESTA'

4     AND COLUMN_NAME = 'ID';

TABLE_NAME                     COLUMN_NAME          ENDPOINT_NUMBER ENDPOINT_VALUE

------------------------------ -------------------- --------------- --------------

TESTA                          ID                                 1            100

TESTA                          ID                                10           1000

TESTA                          ID                               100           3000

TESTA                          ID                              1000           5000

TESTA                          ID                             10000           9000

TESTA                          ID                             11304          10000

已选择6行。

频率直方图中endpoint_number就是桶中的累计个数~ 每一个endpoint_number代表一个桶

[本帖最后由 zergduan 于 2009-12-18 00:23 编辑]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用动态内存分配的方式来读取输入的数字并排序,无需预先输入数字个数。改动的地方如下: ```c #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 1000000 // 求最大值 int findMax(int arr[], int n) { int max = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] > max) { max = arr[i]; } } return max; } // 基数排序 void radixSort(int arr[], int n) { int max = findMax(arr, n); // 找到最大值 int exp = 1; int *bucket = (int *)malloc(sizeof(int) * n); // 申请桶空间 while (max / exp > 0) { int count[10] = {0}; // 每个桶的计数器 for (int i = 0; i < n; i++) { int digit = (arr[i] / exp) % 10; // 获取当前位的数字 count[digit]++; } for (int i = 1; i < 10; i++) { count[i] += count[i - 1]; // 累计计数器 } for (int i = n - 1; i >= 0; i--) { int digit = (arr[i] / exp) % 10; // 获取当前位的数字 bucket[count[digit] - 1] = arr[i]; count[digit]--; } for (int i = 0; i < n; i++) { arr[i] = bucket[i]; } exp *= 10; } free(bucket); // 释放桶空间 } int main() { int *arr = (int *)malloc(sizeof(int) * MAX_SIZE); int n = 0; printf("请输入要排序的正整数,数字之间以空格隔开,以-1结束:"); while (scanf("%d", &arr[n]) != EOF && arr[n] != -1) { n++; } radixSort(arr, n); // 基数排序 printf("排序后的正整数为:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); free(arr); // 释放数组空间 return 0; } ``` 这样就可以自动读取输入的数字并进行排序了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值