几种排序算法的最简单实现方式

//冒泡排序

/*思想:两两比较相邻记录的关键码,如果反序则交换,直到没有反序的记录为止*/  

void BubbleSort(
int *a,
int n)   

{   

    
int i,j;   

    
int x;   

    
for(i=1;i<n;i++)    

     {       

        
for(j=0;j<n-i;j++) //找到一组中最大的   

         {    

            
if(a[j]>a[j+1])    

             {  //进行交换   

                 x   = a[j];   

                 a[j] = a[j+1];   

                 a[j+1] = x;       

             }   

         }   

     }   

}   

//直接插入排序   

/*思想:依次将待排序序列中地每一个记录插入到一个已排好的序列中,直到全部记录排好序*/  
void InsertSort(
int *a,
int n)   

{   

    
int i,j,temp;   

    
for( i=1; i<n; i++)   

     {   

        temp = a[i];     //设置哨兵   

       
for(j=i-1; temp<a[j]; j–)   //寻找插入位置   

        {   

            a[j+1] = a[j];    // 记录后以   

        }   

        a[j+1] = temp;    //插入数据   

     }   

}   

  

//选择排序   

/*思想:第i趟排序通过n-i次关键码的比较,在n-i+1个记录中选择关键码最小的记录,并和第i个记录交换作为有序序列的第i个记录*/  

void SelectSort(
int *a,
int n)   

{   

    
int i, j, temp;   

    
int index;   

    
for( i=0;   i<n-1;   i++)   

     {   

         index=i;       //记录第i趟的最小值标号   

        
for( j=i; j<n; j++)   

         {   

            
if(a[j]<a[index])   

                 index = j;   

         }   

         temp = a[i];   

         a[i] = a[index];   

         a[index] = temp;   

     }   

}   

  

//折半插入排序   

void Insert_halfSort(
int *a,
int n)   

{   

    
int low,high,mid,temp;   

    
for(
int i=1; i<n;i++)  //依次插入数据   

     {   

         temp = a[i];   

         low = 0;   

         high = i-1;   

        
while(low <= high) //找到该插入的地方   

         {   

           mid = (low+high)/2;   

          
if(a[i] <= a[mid])    

               high = mid-1;   

          
else    

               low = mid+1;   

         }   

        
for(
int j=i-1; j>=high+1;   j–)  //找到插入位置   

         {   

            a[j+1]=a[j];   

         }   

         a[high+1] = temp;   

     }   

}   

  

//希尔排序   

//将待排序列划分为若干组,在每组内进行直接插入排序,以使整个序列基本有序,然后再对整个序列进行直接插入排序   

void Shell_Sort(
int *a,
int n)   

{   

    
int i,j,gap,temp;   

    
for(gap=n/2; gap>0; gap /=2)  //分组   

     {   

        
for(i=gap; i<n; i++)  //组内排序   

         {   

            
for(j=i-gap; j>=0; j–)   

             {   

                
if(a[j]>a[j+gap])   

                 {   

                     temp = a[j];   

                     a[j] = a[j+gap];   

                     a[j+gap] = temp;   

                 }   

             }   

         }   

     }   

/*   while(gap>0)

     {

         for(i=gap; i<n; i++)

         {

             for(j=i-gap; j>=0; j–)

             {

                 if(a[j]>a[j+gap])

                 {

                     temp=a[j];

                     a[j] = a[j+gap];

                     a[j+gap] = temp;

                 }

             }

         }

         gap = gap/2;

     }

     */  

点赞