zoukankan      html  css  js  c++  java
  • 排序算法

    #include<stdio.h>
    #include<stdlib.h>
    void InsertSort(int arr[],int length);
    void ShellSort(int arr[],int length);
    void SelectSort(int arr[],int length);
    void BubbleSort(int arr[],int length);
    void QuickSort(int arr[],int low,int high);
    void MergeSort(int arr[],int low,int high);
    void Merge(int arr[],int low,int mid,int high);
    int Partition(int arr[],int low,int high);
    int main()
    {
       int i=0;
       int j=0;
       int k=0;
       int n=9;
       int A[]={
         0,5,9,1,4,11,80,3,10
       };
       for(i=0;i<n;i++){
         printf("%d	",A[i]);
       }
       printf("
    ");
       BubbleSort(A,9);
    // SelectSort(A,9);
    // QuickSort(A,1,8);
    // ShellSort(A,8);
    // InsertSort(A,8);
    // MergeSort(A,1,8);
       for(k=0;k<n;k++)
       {
           printf("%d	",A[k]);
       }
       return 0;
    }
    void InsertSort(int arr[],int length)
    {
       int i=0;
       int j=0;
       for(i=2;i<=length;i++)
       {
         if(arr[i]<arr[i-1])
         {
            arr[0]=arr[i];  
            for(j=i-1;arr[0]<arr[j];j--)
            {
              arr[j+1]=arr[j];
            }
            arr[j+1]=arr[0];
         }
       }
    }
    void ShellSort(int arr[],int length)
    {
       int dk=length/2;
       int i=0;
       int j=0;
       for(;dk>=1;dk=dk/2)
       {
         for(i=dk+1;i<=length;i++)
         {
            if(arr[i]<arr[i-dk])
            {
              arr[0]=arr[i];    //arr[0] temporary storage unit.
              for(j=i-dk;j>0&&arr[0]<arr[j];j-=dk)
              {
                 arr[j+dk]=arr[j];
              }
              arr[j+dk]=arr[0];
            }
         }
         for(int k=0;k<=length;k++)
         {
            printf("%d	",arr[k]);
         }
         printf("
    ");
       }
    }
    void SelectSort(int arr[],int length)
    {
       int i=0;
       int j=0;
       int min=0;
       int temp=0;
       for(int i=1;i<length-1;i++)
       {
         min=i;
         for(j=i+1;j<length;j++)
         {
            if(arr[j]<arr[min])
            {
              min=j;
            }
         }
         if(min!=i)
         {
            temp=arr[i];
            arr[i]=arr[min];
            arr[min]=temp;
         }
         for(int k=0;k<length;k++)
         {
            printf("%d	",arr[k]);
         }
         printf("
    ");
       }
    }
    void QuickSort(int arr[],int low,int high)
    {
       if(low<high)
       {
         int pivotpos=Partition(arr,low,high);
         QuickSort(arr,low,pivotpos-1);
         QuickSort(arr,pivotpos+1,high);
       }
    }
    int Partition(int arr[],int low,int high)
    {
       int pivot=arr[low];
       while(low<high)
       {
         while(low<high&&arr[high]>=pivot)--high;
         arr[low]=arr[high];
         while(low<high&&arr[low]<=pivot)++low;
         arr[high]=arr[low];
       }
       arr[low]=pivot;
       return low;
    }
    void Merge(int arr[],int low,int mid,int high)
    {
       int k=0;
       int i=0;
       int j=0;
       int len=high-low+2;
       int arr_temp[len];
    // int *arr_temp=(int*)malloc((high-low)*sizeof(int));
       for(k=low;k<=high;k++)
       {
         arr_temp[k]=arr[k];
       }
       for(k=low;k<=high;k++)
       {
         printf("%d	",arr_temp[k]);
       }
       printf("
    ");
       for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++)
       {
          if(arr_temp[i]<=arr_temp[j])
           {
               arr[k]=arr_temp[i++];
           }
           else
           {
               arr[k]=arr_temp[j++];
           }
       }
       while(i<=mid)arr[k++]=arr_temp[i++];
       while(j<=high)arr[k++]=arr_temp[j++];
       for(k=low;k<=high;k++)
       {
         printf("%d	",arr[k]);
       }
       printf("
    ");
    }
    void MergeSort(int arr[],int low,int high)
    {
       if(low<high)
       {
         int mid=(low+high)/2;
         MergeSort(arr,low,mid);
         MergeSort(arr,mid+1,high);
         Merge(arr,low,mid,high);
       }
     
    }
    void BubbleSort(int arr[],int length)
    {
       int i=0;
       int j=0;
       int k=0;
       int temp=0;
       for(i=0;i<length-1;i++)
       {
         for(j=0;j<length-1-i;j++)
         {
            if(arr[j]>arr[j+1])
            {
              temp=arr[j+1];
              arr[j+1]=arr[j];
              arr[j]=temp;
            }
         }
         for(k=0;k<length;k++)
         {
            printf("%d	",arr[k]);
         }
         printf("
    ");
       }
    }
  • 相关阅读:
    mysql存储过程笔记
    mysql 命令行操作
    第一天前来报到
    Android Studio导入工程版本问题、gradle版本问题
    LogUtils-定制自己的日志工具
    Git2.11安装下载和github使用
    Android Studio 2.3版本 以及相应的gradle3.3包
    android 导入第三方jar包和类库
    GifView——Android显示GIF动画
    Android中dip、dp、sp、pt和px的区别详解
  • 原文地址:https://www.cnblogs.com/fabulousyoung/p/4073818.html
Copyright © 2011-2022 走看看