当前位置:编程学习 > C#/ASP.NET >>

10种排序方法

一、冒泡(Bubble)排序


[csharp]  void BubbleSortArray() 

      for(int i=1;i<n;i++) 
      { 
        for(int j=0;i<n-i;j++) 
         { 
              if(a[j]>a[j+1])//比较交换相邻元素  
               { 
                   int temp; 
                   temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; 
               } 
         } 
      } 

void BubbleSortArray()
{
      for(int i=1;i<n;i++)
      {
        for(int j=0;i<n-i;j++)
         {
              if(a[j]>a[j+1])//比较交换相邻元素
               {
                   int temp;
                   temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;
               }
         }
      }
}
二、选择排序

 

[cpp]  void SelectSortArray() 

    int min_index; 
    for(int i=0;i<n-1;i++) 
    { 
         min_index=i; 
         for(int j=i+1;j<n;j++)//每次扫描选择最小项  
            if(arr[j]<arr[min_index])  min_index=j; 
         if(min_index!=i)//找到最小项交换,即将这一项移到列表中的正确位置  
         { 
             int temp; 
             temp=arr[i]; arr[i]=arr[min_index]; arr[min_index]=temp; 


void SelectSortArray()
{
    int min_index;
    for(int i=0;i<n-1;i++)
    {
         min_index=i;
         for(int j=i+1;j<n;j++)//每次扫描选择最小项
            if(arr[j]<arr[min_index])  min_index=j;
         if(min_index!=i)//找到最小项交换,即将这一项移到列表中的正确位置
         {
             int temp;
             temp=arr[i]; arr[i]=arr[min_index]; arr[min_index]=temp;
}
}
}
 

三、插入排序

 

[cpp]  void InsertSortArray() 

for(int i=1;i<n;i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分  

    int temp=arr[i];//temp标记为未排序第一个元素  
    int j=i-1; 
while (j>=0 && arr[j]>temp)/*将temp与已排序元素从小到大比较,寻找temp应插入的位置*/ 

    arr[j+1]=arr[j]; 
    j--; 

arr[j+1]=temp; 

void InsertSortArray()
{
for(int i=1;i<n;i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分
{
    int temp=arr[i];//temp标记为未排序第一个元素
    int j=i-1;
while (j>=0 && arr[j]>temp)/*将temp与已排序元素从小到大比较,寻找temp应插入的位置*/
{
    arr[j+1]=arr[j];
    j--;
}
arr[j+1]=temp;
}
}
四、壳(Shell)排序

 

 

[cpp]  void ShellSortArray() 

  for(int incr=3;incr<0;incr--)//增量递减,以增量3,2,1为例  

       for(int L=0;L<(n-1)/incr;L++)//重复分成的每个子列表  

   for(int i=L+incr;i<n;i+=incr)//对每个子列表应用插入排序  
   { 
      int temp=arr[i]; 
      int j=i-incr; 
      while(j>=0&&arr[j]>temp) 
      { 
          arr[j+incr]=arr[j]; 
          j-=incr; 

arr[j+incr]=temp; 



void ShellSortArray()
{
  for(int incr=3;incr<0;incr--)//增量递减,以增量3,2,1为例
{
       for(int L=0;L<(n-1)/incr;L++)//重复分成的每个子列表
{
   for(int i=L+incr;i<n;i+=incr)//对每个子列表应用插入排序
   {
      int temp=arr[i];
      int j=i-incr;
      while(j>=0&&arr[j]>temp)
      {
          arr[j+incr]=arr[j];
          j-=incr;
}
arr[j+incr]=temp;
}
}
}
}
五、归并排序五、归并排序

 

[cpp]  void MergeSort(int low,int high) 

   if(low>=high)   return;//每个子列表中剩下一个元素时停止  
   else int mid=(low+high)/2;/*将列表划分成相等的两个子列表,若有奇数个元素,则在左边子列表大于右侧子列表*/ 
   MergeSort(low,mid);//子列表进一步划分  
   MergeSort(mid+1,high); 
   int [] B=new int [high-low+1];//新建一个数组,用于存放归并的元素  
   for(int i=low,j=mid+1,k=low;i<=mid && j<=high;k++)/*两个子列表进行排序归并,直到两个子列表中的一个结束*/ 
   { 
       if (arr[i]<=arr[j];) 

    B[k]=arr[i]; 
    I++; 

else 
    { B[k]=arr[j]; j++; } 

for(   ;j<=high;j++,k++)//如果第二个子列表中仍然有元素,则追加到新列表  
      B[k]=arr[j]; 
   for(   ;i<=mid;i++,k++)//如果在第一个子列表中仍然有

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,