常用排序算法

1. 冒泡排序

void sort(int[] array)
        
{
            
for(int i = 0; i < array.Length - 1; i ++)
            
{
                
for(int j = i + 1; j < array.Length - 1; j++)
                
{
                    
if(array[i] > array[j])
                        swap(
ref array[i], ref array[j]);
                }

            }

        }


        
void swap(ref int m, ref int n)
        
{
            
int temp;
            temp 
= m;
            m 
= n;
            n 
= temp;
        }


2. 快速排序

快速排序的基本思想是基于分治策略的。对于输入的子序列ap..ar,如果规模足够小则直接进行排序,否则分三步处理:

分解(Divide):将输入的序列ap..ar划分成两个非空子序列ap..aq和aq+1..ar,使ap..aq中任一元素的值不大于aq+1..ar中任一元素的值。 
递归求解(Conquer):通过递归对p..aq和aq+1..ar进行排序。 
合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在ap..aq和aq+1..ar都排好序后不需要执行任何计算ap..ar就已排好序。 
这个解决流程是符合分治法的基本步骤的。因此,快速排序法是分治法的经典应用实例之一。

void Sort(int [] list,int low,int high) 
  

   
if(high<=low) 
   

    
//only one element in array list 
    
//so it do not need sort 
    return
   }
 
   
else if (high==low+1
   

    
//means two elements in array list 
    
//so we just compare them 
    if(list[low]>list[high]) 
    

     
//exchange them 
     Swap(ref list[low],ref list[high]); 
     
return
    }
 
   }
 
   
//more than 3 elements in the arrary list 
   
//begin QuickSort 
   myQuickSort(list,low,high); 
  }





void myQuickSort(int [] list,int low,int high) 
  

   
if(low<high) 
   

    
int pivot=Partition(list,low,high); 
    myQuickSort(list,low,pivot
-1); 
    myQuickSort(list,pivot
+1,high); 
   }
 
  }
 

  
private int Partition(int [] list,int low,int high) 
  

   
//get the pivot of the arrary list 
   int pivot; 
   pivot
=list[low]; 
   
while(low<high) 
   

    
while(low<high && list[high]>=pivot) 
    

     high
--
    }
 
    
if(low!=high) 
    

     Swap(
ref list[low],ref list[high]); 
     low
++
    }
 
    
while(low<high && list[low]<=pivot) 
    

     low
++
    }
 
    
if(low!=high) 
    

     Swap(
ref list[low],ref list[high]);  
     high
--
    }
 
   }
 
   
return low; 
  }


private void Swap(ref int i,ref int j) 
  
//swap two integer 
  
   
int t; 
   t
=i; 
   i
=j; 
   j
=t; 
  }

posted @ 2006-03-13 00:08  Ready!  阅读(351)  评论(1编辑  收藏  举报