几种常见的排序汇总

#include <stdio.h>
#define N 5

int bubble_sort()
{
 int grade[N],temp;
 int i,j;
 i=j=temp=0;

 printf("Please input %d numbers:\n", N);
 for(i=0;i<N;i++)
 {
          scanf("%d", &grade[i]);
 }

 printf("The %d numbers you input are:\n");
 for(i=0;i<N;i++)
 {
          printf("%d\t", grade[i]);
 }
 printf("\n");

 for(i=0;i<N;i++)
 {
           for(j=0;j<N-i-1; j++)
           {
             if(grade[j] > grade[j+1])
             {
            temp = grade[j+1];
                grade[j+1] = grade[j];
                grade[j] = temp;
              }
           }
 }

 printf("After bubble sort the %d numbers you input are:\n");
 for(i=0;i<N;i++)
 {
          printf("%d\t", grade[i]);
 }
 printf("\n");

 return 1;
}

int quick_sort_get()
{

 int i=0;
 int grade[N];
 int first=0;
 int end=N-1;

 printf("Please input %d numbers:\n", N);
 for(i=0;i<N;i++)
 {
          scanf("%d", &grade[i]);
 }

 printf("The %d numbers you input are:\n", N);
 for(i=0;i<N;i++)
 {
          printf("%d\t", grade[i]);
 }
 printf("\n");

 quick_sort(grade, first, end);

 printf("After quick sort the %d numbers you input are:\n", N);
 for(i=0;i<N;i++)
 {
          printf("%d\t", grade[i]);
 }
 printf("\n");

 return 1;

}


int quick_sort(int grade[], int first, int end)
{
 int i=first,j=end,temp=grade[first];
 
 while(i<j)
 { 
  while(i<j && grade[j]>=temp)
  {
       j--;
  }
  grade[i]=grade[j];
  
  while(i<j && grade[i]<=temp)
  {
        i++;
  }
  grade[j]=grade[i];
 }

 grade[i]=temp;
 
 if(first<i-1)
 {
  quick_sort(grade,first,i-1);
 }
 if(end>i+1)
 {
  quick_sort(grade,i+1,end);
 }

 return 1;

}

 

int insert_sort ()
{
 int i=0,j=0;
 int grade[N];
    int temp=0;

 printf("Please input %d numbers:\n", N);
 for(i=0;i<N;i++)
 {
          scanf("%d", &grade[i]);
 }

 printf("The %d numbers you input are:\n", N);
 for(i=0;i<N;i++)
 {
          printf("%d\t", grade[i]);
 }
 printf("\n");
 
    for (i = 1; i<N; i++)
   {
      temp = grade[i];
         for(j = i;j>0;j--)
         {
           if ( temp < grade[j-1] )
          {
        grade[j] = grade[j-1];
           }
             else
             {
         break;
     }   
          }
    grade[j] = temp;
    }  
 printf("After bubble sort the %d numbers you input are:\n");
 for(i=0;i<N;i++)
 {
          printf("%d\t", grade[i]);
 }
 printf("\n");
 
 return 1;
}

int select_sort()
{
 int grade[N],temp;
 int i,j,k;
 i=j=k=temp=0;

 printf("Please input %d numbers:\n", N);
 for(i=0;i<N;i++)
 {
          scanf("%d", &grade[i]);
 }

 printf("The %d numbers you input are:\n", N);
 for(i=0;i<N;i++)
 {
          printf("%d\t", grade[i]);
 }
 printf("\n");

 for(i=0;i<N-1;i++)
 {
     k=i;
           for(j=i+1;j<N;j++)
           {
              if(grade[j]<grade[k])
              {
     k=j;
               }
            }
        if(i!=k)
        { 
         temp=grade[i];
    grade[i]=grade[k];
    grade[k]=temp;
   }
 }

 printf("After bubble sort the %d numbers you input are:\n", N);
 for(i=0;i<N;i++)
 {
          printf("%d\t", grade[i]);
 }
 printf("\n");

 return 1; 
}

int main()
{
 int i;
 char ch;

 do
 {
  printf("\t|===========================================================|\n");
  printf("\t|                                                           |\n");
  printf("\t|                                                           |\n");
  printf("\t|                        MENU                               |\n");
        printf("\t|                                                           |\n");
  printf("\t|===========================================================|\n");
  printf("\t|             1................bubble_sort..................|\n");
  printf("\t|             2................quick_sort...................|\n");
  printf("\t|             3................insert_sort..................|\n");
  printf("\t|             4................select_sort..................|\n");
  printf("\t|             5.............................................|\n");
  printf("\t|             6.............................................|\n");
  printf("\t|             7.............................................|\n");
  printf("\t|             8.............................................|\n");
  printf("\t|===========================================================|\n");
  printf("\tPlease input your select:\n");
  scanf("%d", &i);
  switch(i)
  {
   case 1:
     bubble_sort();
     break;
     
   case 2:
      quick_sort_get();
      break;
   case 3:
     insert_sort();
     break;
   case 4:
     select_sort();
     break;
   /*case 5: ;  break;
   case 6: ;  break;
   case 7: ; break;
   case 8: ;  break;
   */
   default:
      printf("ERROR INPUT\n");
  }
 
  printf("Please input y or Y to continue other to end:\n");
  scanf("\n%c", &ch);
 }while((ch=='y')||(ch=='Y'));

 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值