现在的位置: 首页 > 综合 > 正文

排序算法(C语言实现)

2013年08月02日 ⁄ 综合 ⁄ 共 3246字 ⁄ 字号 评论关闭

冒泡排序

 

void BubbleSort(Element Array[], ArraySize Count)//一趟后,把最小的数放到最前面
{    
    ArraySize i,j;
    Element temp;
    
for (i = 0; i < Count - 1; i++)
        
for(j = Count - 1; j > i; j--)//从后往前找最小的数
            if(Array[j] < Array[j-1])
            
{
                temp 
= Array[j];
                Array[j] 
= Array[j-1];
                Array[j
-1= temp;
            }

}


void BubbleSort2(Element Array[], ArraySize Count)    // Improve performance
{    
    ArraySize i,j;
    Element temp;
    
int  flag;
    
for (i = 0; i < Count - 1; i++)
    
{
        flag 
= 0;
        
for(j = Count - 1; j > i; j--)
            
if(Array[j] < Array[j-1])
            
{
                temp 
= Array[j];
                Array[j] 
= Array[j-1];
                Array[j
-1= temp;
                flag 
= 1;
            }

        
if (flag == 0break;
    }

}

 

插入排序

 

void InsertSort(Element d[], ArraySize n)
{
    ArraySize i,j;
    Element t;
    
for(i=1; i<n; i++)
    
{
        t 
= d[i];
        
if(d[i] < d[i-1])
        
{
            
for(j=i-1; j>=0 && t<d[j]; j--)
                d[j
+1= d[j];
            d[j
+1= t;
        }

    }

}

 

快速排序

 


void QuickSort(Element Array[], ArraySize Count)
{    
    QuickSortRange(Array,
0,Count - 1);
}


ArraySize Partition(Element Array[], ArraySize Low, ArraySize High)
{
    Element v,temp;
    ArraySize vPos;
    vPos 
= Low;
    v 
= Array[vPos];
    Low
++;
    
    
while(1)
    
{
        
while((High > Low) && (Array[High] > v)) High--;
        
while((Low < High) && (Array[Low] <= v)) Low++;
        
if(Low >= High) break;
        temp 
= Array[Low];
        Array[Low] 
= Array[High];
        Array[High] 
= temp;
        Low
++;
        High
--;
    }

    
if(Array[Low] > v) Low--;
    
if(vPos != Low)
    
{
        temp 
= Array[Low];
        Array[Low] 
= Array[vPos];
        Array[vPos] 
= temp;
    }

    
return Low;
}


void QuickSortRange(Element Array[], ArraySize Low, ArraySize High)
{
    ArraySize Middle;
    
if(Low < High)
    
{
        Middle 
= Partition(Array, Low, High);
        QuickSortRange(Array,Low,Middle 
- 1);
        QuickSortRange(Array,Middle 
+ 1,High);
    }

}

 

选择排序

 

void SelectSort(Element d[], ArraySize n)
{
    
int i, j, k, t;

    
for(i = 0; i<n-1; i++)
    
{
        k 
= i;
        
for(j=i+1;j<n;j++)
        
{
            
if(d[j]<d[k])
                k 
= j;
        }

        
if(k!=i)
        
{
            t 
= d[i];
            d[i] 
= d[k];
            d[k] 
= t;
        }

    }

}

 

堆排序

 


void BuildStock(Element Array[], ArraySize Count)
{
    
long Num = Count/2, temp, i;

    
if(2*Num == Count)
    
{
        
if(Array[Num-1]<Array[Count-1])
        
{
            temp 
= Array[Num-1];
            Array[Num
-1= Array[Count-1];
            Array[Count
-1= temp;
        }

    }

    
else
    
{
        
if(Array[Num-1]<Array[Count-2|| Array[Num-1]<Array[Count-1])
        
{
            
if(Array[Count-2]>Array[Count-1])
            
{
                temp 
= Array[Count-2];
                Array[Count
-2= Array[Num-1];
                Array[Num
-1= temp;
            }

            
else
            
{
                temp 
= Array[Count-1];
                Array[Count
-1= Array[Num-1];
                Array[Num
-1= temp;
            }

        }

    }



    
for(i=Num-1; i>0; i--)
    
{
        
if(Array[i-1]<Array[i*2-1|| Array[i-1]<Array[i*

抱歉!评论已关闭.