zoukankan      html  css  js  c++  java
  • 常用排序算法

    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; 
      }

  • 相关阅读:
    面试-Hash是怎么实现的?
    教程-在Delphi中怎么查看是否有内存泄漏(Delphi2007)+WIN7
    面试-SizeOf一个对象会得到什么?
    Unity-Animator深入系列---录制与回放
    Animation.Sample用法介绍
    Unity-Animator深入系列---StateMachineBehaviour状态机脚本学习
    Unity-Animator深入系列---deltaPosition&deltaRotation
    Unity-Animato深入系列---FloatValue阻尼
    Animation在每一帧中的执行顺序测试
    Unity脚本在层级面板中的执行顺序测试2
  • 原文地址:https://www.cnblogs.com/silva/p/348635.html
Copyright © 2011-2022 走看看