排序算法总结

排序算法总结下,以便查找:
一.冒泡
 
void BubbleSort(int a[], int n)
{ int i,j,tmp; 
 int flag;
 int count = 0;
 printf("initial sorting:");
 PrintArray(a,n);
 for(i=0; i<n-1; i++)
 {flag = 0;
                  for(j=0; j<n-i-1; j++)         {  if(a[j] > a[j+1])           {tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; flag = 1;            }         }         count++;         printf("after %d sorting:",count);         PrintArray(a,n); if(flag == 0)return;     }
}
 
二选择排序
 
void SelectSort(int a[], int n) { int i,j,tmp;  int min;  int count=0;  printf("initial sorting:");  PrintArray(a,n);   for(i=0;i<n-1;i++)  { min=i;
    for(j=i;j<n;j++)
    { if(a[j]<a[min])
          min=j;
    }
    if(min!=i)
    {
         tmp=a[i];
a[i]=a[min];
         a[min]=tmp;
    }
    count++;
    printf("after %d sorting:",count);
    PrintArray(a,n);
 }
}
 
三插入排序
   printf("initial sorting:");  PrintArray(a,n);  for (i=1;i<n;i++)  {tmp=a[i];  for(j=i-1;(j>=0)&&(tmp<a[j]);j--)    a[j+1]=tmp;    printf("after %d sorting:",i);    PrintArray(a,i+1);  } }
void InsertSort(int a[],int n)
{int i,j,tmp;
a[j+1]=a[j];
 
四希尔排序
   for(k=0;k<count;k++)  { gap=gap/2;
void shell(int count,int a[])
{
 int i,j,gap=count,k,x;
      {x=a[i];      for(j=i-gap;(x<a[j])&&(j>=0);j=j-gap)      a[j+gap]=a[j];      a[j+gap]=x;     }     if (gap==0) break;    printf("gap=%d:/n",gap);     PrintArray(a,count);  } }
   for(i=gap;i<count;++i)
 
五快排
(1)

void QuickSort ( int list[], int left,int right )
{
//在待排序区间 left?right 中递归地进行快速排序
    if ( left < right) {     
       int pivotpos = Partition ( list, left, right ); //划分
       QuickSort ( list, left, pivotpos-1);    
        //在左子区间递归进行快速排序
       QuickSort ( list, pivotpos+1, right );
        //在左子区间递归进行快速排序  
    }
}
int Partition ( int list[],int low,const int high )
{
    int pos = low;                             //基准位置
    int pivot = list[low]; 
    for ( int i = low+1; i <= high; i++ )
       if ( list[i]< pivot && ++pos != i  )
          Swap ( list[pos], list.Vector[i] );
          //小于基准对象的交换到区间的左侧去
         
    Swap ( list[low], list[tpos] );
   
    return pos;
}
 
 
if(left<max)  QuickSort(a,left,max); if(right > min)  QuickSort(a,min,right);   }
 
 int min,max;  char *norm, *tmp;  min = left;  max = right;  norm=a[(left+right)/2];  do  {while(strcmp(a[min],norm)<0&& min<right)      min++;   while(strcmp(a[max],norm)>0 && max>left)     max--;  if(min<=max)  { tmp=a[min]; a[min]=a[max]; a[max]=tmp;    min++;    max--;  }
}while(min<=max);
(2) void QuickSort(char *a[], int left, int right) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值