| Homepage | Downloads | Games | Webboard | Chatroom| Publish |

www.se-ed.net/nikom2532

  • Home Page
  • Downloads
  • Games


  • Calendar



    Web Links

  • โปรแกรมปลาดาว
  • ลีนุกส์ทะเล
  • redhat Linux
  • Thaiware
  • Thaimail
  • ARiP



  • Visitor

    Friendly Webside :
    www.geocities.com/nikom2532 www.se-ed.net/nikom2532-fun

    Webmaster Talk Today
    Hello ,welcome to homepage 's www.se-ed.net/nikom2532 . It's Data, Information Technology ,you get it now today.

    Radix Sort ด้วย array

    ในเรื่องของ Radix Sort การจัดเรียงแบบ Radix นั้น เราจะเล่นกันที่หลักสิบ, หลักร้อย หลักพัน ไปเรื่อยๆ ... นี่คือการเรียงแบบ Radix Sort ซึ่งในการจัดเรียงแบบนี้นั้น เราจะเริ่มดูที่หลักหน่วยก่อน จากนั้นไปหลักสิบ, ร้อย, พัน... ดังเช่น เรามีตัวเลขอยู่ดังนี้

     

    38,28,18,58,64,44,74,87

    ถ้าเราจะเรียงตัวเลขข้างบนด้วยเทคนิค Radix นั้น เราจะจัดเรียงลําดับเลขในชุดนี้โดยดูหลักหน่วยก่อน เรียงมันจากน้อยไปมาก ก็จะได้ดังนี้

    64 44 74 87 38 28 18 58

    เห็นมั้ยครับว่า หลักหน่วยได้เรียงแล้ว ต่อไปเราก็จับเรียงในหลักสิบ หลักสิบมีเท่าไหร่ ก็เรียงจากน้อยไปมาก มันก็จะสลับกันได้ดังนี้

    18 28 38 44 58 64 74 87

    นี่ก็คือวิธีการจัดเรียงแบบ Radix ซึ่งเทคนิคนี้ได้นําเสนอเอาไว้ในหนังสือ Data Structure : implement through C/C++ แต่คราวนี้ จะมา implement โดยใช้อาเรย์แทน คือ ปกติแล้วเราจะใช้อาเรย์ในการจัดการก็ได้ มันก็ง่ายหน่อย แต่ก็จะต้องออกแบบคลาสนะครับ คลาสนี้ที่จะนําเสนอกันก็คือคลาส array จะคล้ายๆ กับคลาส linkedlist ครับ แต่อันนี้จะเล่นเป็นอาเรย์แทน ได้ผลเหมือนกันครับผม

    เรามาดูคลาสกันนครับ พร้อมกับตัวอย่างการ Sort แบบ Radix ครับผม

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    class array
    {
    #define MAX 500

    int number[MAX];
    int current;

    public:
    int nav;
    array()
    {
    nav=0;
    current=0;
    for (int i=0;i<MAX;i++) number[i]=0;
    }
    ~array()
    {
    removeall();
    }

    void start()
    {
    nav=0;
    }
    bool notend()
    {
    if (nav!=current)
    return true;
    else
    return false;
    }
    void next()
    {
    nav++;
    }
    int getnum()
    {
    return number[nav];
    }

    void addnum(int what)
    {
    number[current]=what;
    current++;
    }

    void removeall()
    {
    for (int i=0;i<MAX;i++) number[i]=0;
    current=0;
    }
    };

    #define MAX 10

    void main()
    {
    array radix[10];

    int i;
    int number[MAX];

    // random numbers into an array
    srand(unsigned(time(NULL)));
    for (i=0;i<MAX;i++)
    {
    number[i]=rand()%50+10;
    }

    for (i=0;i<MAX;i++)
    {
    int which=number[i]%10;
    radix[which].addnum( number[i] );
    printf("add %d to [%d]\n",number[i],which);
    }
    for (i=0;i<10;i++)
    {
    printf("Radix[%d]=",i);
    for (radix[i].start();radix[i].notend();radix[i].next())
    {
    static int count=0;
    number[count]=radix[i].getnum();
    printf("%d ",number[count]);
    count++;
    }
    printf("\n");
    radix[i].removeall();
    }
    printf("=== PASS 1 ===\n");
    for (i=0;i<MAX;i++)
    {
    printf("%d ",number[i]);
    }
    printf("\n");

    for (i=0;i<MAX;i++)
    {
    int which=number[i]/10;
    radix[which].addnum( number[i] );
    printf("add %d to [%d]\n",number[i],which);
    }
    for (i=0;i<10;i++)
    {
    printf("Radix[%d]=",i);
    for (radix[i].start();radix[i].notend();radix[i].next())
    {
    static int count=0;
    number[count]=radix[i].getnum();
    printf("%d ",number[count]);
    count++;
    }
    printf("\n");
    radix[i].removeall();
    }
    printf("=== PASS 2 ===\n");

    for (i=0;i<MAX;i++)
    {
    printf("%d ",number[i]);
    }
    printf("\n");
    }

    ผลการรันโปรแกรมจะได้ดังนี้

    add 33 to [3]
    add 26 to [6]
    add 26 to [6]
    add 22 to [2]
    add 27 to [7]
    add 47 to [7]
    add 59 to [9]
    add 56 to [6]
    add 18 to [8]
    add 17 to [7]
    Radix[0]=
    Radix[1]=
    Radix[2]=22
    Radix[3]=33
    Radix[4]=
    Radix[5]=
    Radix[6]=26 26 56
    Radix[7]=27 47 17
    Radix[8]=18
    Radix[9]=59
    === PASS 1 ===

    22 33 26 26 56 27 47 17 18 59

    add 22 to [2]
    add 33 to [3]
    add 26 to [2]
    add 26 to [2]
    add 56 to [5]
    add 27 to [2]
    add 47 to [4]
    add 17 to [1]
    add 18 to [1]
    add 59 to [5]
    Radix[0]=
    Radix[1]=17 18
    Radix[2]=22 26 26 27
    Radix[3]=33
    Radix[4]=47
    Radix[5]=56 59
    Radix[6]=
    Radix[7]=
    Radix[8]=
    Radix[9]=
    === PASS 2 ===

    17 18 22 26 26 27 33 47 56 59

    Back     Next

     
    ----== Contact US ==----

    © Copyright 2003 Nikom Suwankamol. ® All right reserved. E-mail : nikom2532@yahoo.com , nikom2532@se-ed.com
    Home Size Server Supported By : SE-Education Public Company Limited