希尔排序温习~~

来源:互联网 发布:淘宝的询单有礼在哪里 编辑:程序博客网 时间:2024/06/10 15:42
#include <stdio.h>

void
printf_array(int *array,int len)
{
 int i=0;
 for(i =0;i<len;i++)
 {
  printf("%d ",*(array+i));     
  //printf("%d ",array[i]);     
                
 printf("\n");
                
}
 void swap_array(int *array,int i,int k)
 {
  int temp = *(array+i);
  *(array+i) = *(array+k);
  *(array+k) = temp;
 }
 void InsertSort(int *array,int len)//O(n*n)
 {
   int i=0,j=0;
   int k = -1;  
   int temp=-1;
  for(i=1;i<len;i++)
   {
    k=i;
    temp =*(array+k);
   for(j=i-1;(j>=0)&&(*(array+j)> temp);j--)
    {
     *(array+j+1) = *(array+j);
     k =j;             
    }
    *(array+k)=temp;
   }
 }
 void SelectSort(int *array,int len)//O(n*n)
 {
   int i=0,j=0;
   int k = -1;
  for(i=0;i<len;i++)
   {
   k=i;
      for(j=i;j<len;j++)
      {
      if( *(array+j) < *(array+k) )
          k =j;         
      }
  swap_array(array,i,k);//找出最小的然后和有序的最后的替换
   
   
 }
 void BubblSort(int *array,int len)
 {
  int i=0;
  int j=0;
  int exchange=1;
  for(i=0;i<len&& exchange;i++)
  {
   exchange = 0;
  for(j=len-1;j>i;j--)   
         
   if(*(array+j-1)> *(array+j))//如果有逆序,则交换,并记录
    {
   swap_array(array,j-1,j);
    exchange =1;
    }
   }
   
  }
  printf("exchange times%d\n",i);   
 }
 
  void ShellSort(int *array,int len)//O(n*n)
 {
   int i=0,j=0;
   int k = -1,gap;
   int temp =-1;
   
   gap = len;
   do
   {
      gap = gap/3+1;// 一般取的是3
      for(i=gap;i<len;i+=gap)//当最终gap=1;就是插入排序了
      {
      k=i;
      temp = *(array+k);
       for(j=i-gap;(j>=0)&&(*(array+j)> temp);j-=gap)
       {
         *(array+j+gap) = *(array+j);
         k =j;             
       }
       *(array+k) =temp;
      }
   }while(gap >1);
 }
int main(void )
{
 int array[]={21,25,49,25,16,8};
 int len = sizeof(array) / sizeof(*array);
 //SelectSort(&array[0],len);
 printf("%d\n",len);
 //InsertSort(array,len);
 //BubblSort(array,len);
 ShellSort(array,len);
 printf_array(&array[0],len);   
 
 while(1);
 return 0;
}
 
0 0
原创粉丝点击