2015年9月17日

Radix Sort 基數排序法

#include "iostream"

void radix(int data[],int n);
int main()
{
    int number=9;
    int data[]={5,6,4,8,2,3,7,9,1};
    int i;

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

    radix(data,number);

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

    printf("\n");
    system("PAUSE");
    return 0;
}

void radix(int data[],int n){
  int k,i,j,z;
  int m;
  for (z=1;z<=100;z=z*10){
     int temp[10][100]={0};
     for (i=0;i<n;i++){
       m=data[i]/z%10;
       temp[m][i]=data[i];
     }
     k=0;
     for (i=0;i<10;i++){
         for (j=0;j<n;j++){
             if (temp[i][j]!=0){
               data[k]=temp[i][j];
               k++;
             }
         }
     }
  }
}

Merge Sort 合併排序法

#include "iostream"

void mergesort(int a[],int left,int right);
void merge(int a[],int left,int mid,int right);
int main()
{
    int number=9;
    int data[]={5,6,4,8,2,3,7,9,1};
    int i;

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

    mergesort(data,0,number-1);

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

    printf("\n");
    system("PAUSE");
    return 0;
}

void mergesort(int data[],int left,int right){
  int mid;
  if (right>left){
      mid=(right+left)/2;
      mergesort(data,left,mid);
      mergesort(data,mid+1,right);
      merge(data,left,mid,right);
  }
}

void merge(int data[],int left,int mid,int right){
  int rux[right-left+1];
  int i=left;
  int j=mid+1;
  int k;
  for (k=0;k<right-left+1;k++){
    if (i==mid+1){
       rux[k]=data[j];
       j++;
    }else if (j==right+1){
       rux[k]=data[i];
       i++;
    }else{
       rux[k]= data[i]<data[j] ? data[i++]:data[j++];
    }
  }
  for (k=0,j=left;j<right+1;j++,k++)
  data[j]=rux[k];
}

Shell Sort 謝儞排序法

#include "iostream"

void shellsort(int data[],int n);
int main()
{
    int number=9;
    int data[]={5,6,4,8,2,3,7,9,1};
    int i;

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

    shellsort(data,number);

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

    printf("\n");
    system("PAUSE");
    return 0;
}

void shellsort(int data[],int n){
  int jup;
  jup=n/2;
  int i,j;
  int temp;
  while(jup!=0){
    for (i=jup;i<n;i++){
    temp=data[i];
    j=i-jup;
      while (temp<data[j] && j>=0){
      data[j+jup]=data[j];
      j=j-jup;
      }
      data[j+jup]=temp;
      j=j-jup;
    }
    jup=jup/2;
  }
}

Heap Sort 堆疊排序法

#include "iostream"

void heapsort(int data[],int number);
void heap(int data[],int index,int n);
int main()
{
    int number=9;
    int data[]={5,6,4,8,2,3,7,9,1};
    int i;

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

    heapsort(data,number);

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

    printf("\n");
    system("PAUSE");
    return 0;
}

void heapsort(int data[],int n){
    int i;
    for (i=(n-2)/2;i>=0;i--)
    {
        heap(data,i,n);
    }
 
    for (i=n-1;i>=0;i--)
    {
        int temp=data[0];
        data[0]=data[i];
        data[i]=temp;
        heap(data,0,i);
    }
}
void heap(int data[],int index,int n){
     int left=index*2+1;
     int right=index*2+2;
     int largest=index;
     int i;
   
     if ((left<n)&&(data[left]>data[largest]))
     {
     largest=left;
     }
     if ((right<n)&&(data[right]>data[largest]))
     {
     largest=right;
     }
   
     if (index!=largest)
     {
       int temp=data[index];
       data[index]=data[largest];
       data[largest]=temp;
       heap(data,largest,n);
     }
   
}

Quick Sort 快速排序法

#include "iostream"

void quicksort(int data[],int left,int right);
int main()
{
    int number=9;
    int data[]={5,6,4,8,2,3,7,9,1};
    int i;

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

    quicksort(data,0,number-1);

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

    printf("\n");
    system("PAUSE");
    return 0;
}

void quicksort(int data[],int left,int right){
  int i=left+1;
  int j=right;
  int splitting=data[left];
  int temp;
  if (left<right){
      do{
        while(i<right && data[i]<splitting)i++;
        while(j>left && data[j]>splitting)j--;
        if (i<j){
          temp=data[i];
          data[i]=data[j];
          data[j]=temp;
        }
      }while(i<j);
     
      temp=data[left];
      data[left]=data[j];
      data[j]=temp;
      quicksort(data,left,j-1);
      quicksort(data,j+1,right);
  }
}

Selection Sort 選擇排序法

#include "iostream"

void selectionsort(int data[],int n);
void quicksort(int data[],int left,int right);
void heapsort(int data[],int number);
void heap(int data[],int index,int n);
void shellsort(int data[],int n);
void mergesort(int a[],int left,int right);
void merge(int a[],int left,int mid,int right);
void radix(int data[],int n);
int main()
{
    int number=9;
    int data[]={5,6,4,8,2,3,7,9,1};
    int i;

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

    selectionsort(data,number);

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

    printf("\n");
    system("PAUSE");
    return 0;
}

void selectionsort(int data[],int n){
     int i,j;
     int temp;
     for (i=0;i<n;i++){
         temp=i;
         for (j=i+1;j<n;j++){
             if (data[temp]>data[j]){
                temp=j;
             }
         }
         int flag=data[temp];
         data[temp]=data[i];
         data[i]=flag;
     }
}

Insertion Sort 插入排序法

#include "iostream"

void insertionsort(int data[],int n);
int main()
{
    int number=9;
    int data[]={5,6,4,8,2,3,7,9,1};
    int i;

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

    insertionsort(data,number);

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

    printf("\n");
    system("PAUSE");
    return 0;
}

void insertionsort(int data[],int n){
     int i,j;
     for (i=1;i<n;i++){
         int temp=data[i];
         for (j=i;j>0;j--){
             if (temp<data[j-1]){
                data[j]=data[j-1];
                data[j-1]=temp;
               
                 for (int k=0;k<n;k++){
                 printf("%d",data[k]);
                 }
                 printf("\n");
               
             }
         }
     }
}

Bubble Sort 泡泡排序法

#include "iostream"

void bubblesort(int data[],int n);
int main()
{
    int number=9;
    int data[]={5,6,4,8,2,3,7,9,1};
    int i;

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

    bubblesort(data,number);

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

    printf("\n");
    system("PAUSE");
    return 0;
}
void bubblesort(int data[],int n){
     int i,j;
     for (i=0;i<n;i++){
         for (j=i;j<n;j++){
             if (data[j]<data[i]){
                int temp=data[j];
                data[j]=data[i];
                data[i]=temp;
             }
         }
     }
}