关于几种排序算法(简易冒泡,正宗冒泡,选择,插入,快速,希尔,堆排序)

#include<stdio.h>
#define MAXSIZE 1000
typedef struct 
{
        int r[MAXSIZE+1];
        int length;
}SqList;
int swap(SqList *L,int i,int j)
{
        int temp=L->r[j];
        L->r[i]=L->r[j];
        L->r[j]=temp;

}


int BubbleSort0(SqList *L)//简易冒泡排序
{
        int i,j;
        for(i=1;i<L->length;i++)
        {
         for(j=i+1;j<=length;j++)
   {
           if(L->r[i]>L->r[j])
        swap(L,i,j);
  }
 }

}


int BubbleSort1(SqList *L)//正宗冒泡排序
{
 int i,j;
 for(i=1;i<L->length;i++)
 {
  for(j=length;j>i;j--)
  {
   if(L->r[j]<L->r[j-1])
   swap(L,i,j)
   }
 }

}


int BubbleSort2(SqList *L)//优化冒泡排序
{
 int i,j;
 Status flag=TURE;
 for(i=1;i<L->length;i++)
 {
   flag=FALSE;
   for(j=L->length-1;j>=i;j--)
   {

   if(L->r[j]>L->r[j+1]) 

   {

      swap(L,i,j);
       flag=TURE;
     }
   }
 }

}


int SelectSort(SqList *L)//选择排序
{
 int i,j,min;
 for(i=1;i<length;i++)
 {
   min=i;
   for(j=i+1;j<=length;j++)
  {
    if(L->[min]>L->[j])
     min=j;
   }
   if(i!=min)
     swap(L,i,j)
 }

}

扫描二维码关注公众号,回复: 2319389 查看本文章


int InsertSort(SqList *L)//插入排序
{
 int i,j;
 for(i=2;i<=length;i++)
 {
   if(L->r[i]<L->r[i-1])
   {
     L->r[0] = r[i];
     for(j=i-1;L->r[j]>L->r[0];j--)
     {
       L->r[j+1] = L->r[j];
     }
     L->r[j+1] = L->r[0];
   }
 }

}


int ShellSort(SqList *L)//希尔排序
{
 int i,j,k=0;
 int increment=L->length;
 do
 {
   increment=increment/3+1;
   for(i=increment+1;i<L->length;i++)
   {
     if(L->r[i]<L->r[i-increment])
     {
       L->r[0]=L->r[i];
       for(j=i-increment;j>0&&L->r[0]<L->r[j];j-=increment)
       L->r[j+increment]=L->r[j];
       L->r[j+increment]=L->r[0];

     }
   }
 }while(increment>1);

}


void QSort(SqList *L,int low,int high)//快排序
{
 int pivot;
 if(low<high)
 {
   pivot=Partition(L,low,high);
   QSort(L,low,pivot-1);
   QSort(L,pivot+1,high);
 }

}


int Partition(SqList *L,int low,int high)
{
 int pivotkey;
 pivotkey=L->r[low];
 while(low<high)
 {
   while(low<high && L->r[high]>=pivotkey)
   {
     high--;
   }
   swap(L,low,high);
   while(low<high && L->r[low]<=pivotkey)
   {
     low++;
     }
   swap(L,low,high);


 }
 return low;

}


void Partition1(SqList *L,int low,int high)//优化快排
{
 int pivotkey;
 int m=low+(high-low)/2;
 if(L->r[low]>L->r[high])
 swap(L,low,high);
 if(L->r[m]>L->r[high])
 swap(L,high,m);
 if(L->r[m]>L->r[low])
 swap(L,m,low);
 pivotkey=L->r[low];
 L->r[0]=pivotkey;
 while(low<high)
 {
   while(low<high&&L->r[high]>=pivotkey)
   {
     high--;
   }
   L->r[low]=L->r[high];
   while(low<high&&L->r[low]<=pivotkey)
   {
     low++;
   }
   L->r[high]=L->r[low];
 }
 L->r[low] = L->r[0];
 return low;

}


void QSort1(SqList *L,int low,int high)
{
 int pivot;
 if((high-low)>MAX_LENGTH_IENGTH_INSERT_SORT)
 {
  while(low<high)
  {
   pivot = Partition1(L,low,high);
   Qsort1(L,povit+1,high);
   low = pivot+1;
  }
 }
 else
 {
   InsertSort(L);
 }

}


void HeapAdjust(SqList *L,int s,int m)//堆排序
{
 int temp,j;
 temp = L->r[s];
 for(j = 2*s;j <= m;j *= 2 )
 {
  if(j<m && L->r[j]<L->r[j+1])
  ++j;
   if(temp >= L->r[j])
     break;
   L->r[s] = L->r[j];
   s=j;
 }
 L->r[s] = temp;

}


void HeapSort(SqList *L)
{
 int i;
 for(i=L->length/2;i>0;i--)
 {
   HeapAdjust(L,i,L->length);
 }
 for(i=L->length;i>1;i--)
 {
   swap(L,1,i--);
   HeadAdjust(L,1,i-1);
 }
}
int main()
{


}

猜你喜欢

转载自blog.csdn.net/chenwenjie666/article/details/79202938