zoukankan      html  css  js  c++  java
  • 桶排序

      1 #include<iostream>
      2 using namespace std;
      3 
      4 struct node
      5 {
      6     node *next;
      7     double n;
      8 };
      9 
     10 
     11 struct list
     12 {
     13     node *head;
     14     int n = 0;
     15 };
     16 
     17 void addlist(list *t, double i)
     18 {
     19     if (t->n == 0)
     20     {
     21         t->head = new node;
     22         t->head->n = i;
     23         t->head->next = NULL;
     24         t->n++;
     25     }
     26     else
     27     {
     28         node *x = new node;
     29         x->n = i;
     30         x->next = t->head;
     31         t->head = x;
     32         t->n++;
     33     }
     34 }
     35 
     36 
     37 void insertion(list *b)
     38 {
     39     int flag = 1;
     40     if (b->n < 2)
     41         ;
     42     else
     43     {
     44         node *m1;
     45         node *m=b->head;
     46         node *q = b->head->next;
     47         node *p = b->head;
     48         while (flag)
     49         {
     50             if (q->next == NULL)
     51                 flag = 0;
     52             double t = q->n;
     53             while (p->n < t)
     54             {
     55                 if (p == b->head)
     56                 {
     57                     m1 = b->head;
     58                 }
     59                 else m1 = m1->next;
     60                 p = p->next;
     61                 
     62             }
     63             m->next = q->next;
     64             if (m1 != NULL)
     65             m1->next = q;
     66             q->next = p;
     67             q = m->next;
     68         }
     69     }
     70 }
     71 
     72 void Radix_Sort(double a[], int n)
     73 {
     74     list b[10];
     75     int j;
     76     for (int i = 1; i <= n; i++)
     77     {
     78         
     79         j = n*a[i];
     80         addlist(&b[j], a[i]);
     81     }
     82     for (int i = 0; i < n; i++)
     83     {
     84         insertion(&b[i]);
     85     }
     86     for (int i = 0; i < n; i++)
     87     {
     88             for (int j = 1; j <= b[i].n; j++)
     89             {
     90                 cout << b[i].head->n << endl;
     91                 b[i].head = b[i].head->next;
     92             }
     93     }
     94 }
     95 
     96 
     97 
     98 void main()
     99 {
    100     double a[11];
    101     for (int i = 1; i <= 10; i++)
    102         a[i] = 1.0 - 0.06*i;
    103     Radix_Sort(a, 10);
    104 
    105 
    106     
    107     
    108     
    109 }

    桶排序先把要排的小数乘一个整数,按得到整数的整数部分,放入list[整数部分]。

    在用成熟的排序算法把list中的小数进行排序,因为数列较少,降低了比较的次数,从而提高效率。

    缺点减少了时间,但却消耗了较多的内存。

  • 相关阅读:
    Http请求处理整个过程
    C#文件下载方法
    EF链接ORACLE
    js复制功能的有效方法总结新
    js复制功能的有效方法总结
    pre即可保持原来样式也可以换行
    读取url后参数方法
    同名窗口不能重新打开
    2020/06/19 mysql 表分组查询 表约束 主键 外键 外键约束
    2020/06/17 mysql 表内容的增删改查
  • 原文地址:https://www.cnblogs.com/zhengzhe/p/6488958.html
Copyright © 2011-2022 走看看