Advertisement

快速排序 C# 代码(带注释)

阅读量:
复制代码
 class Program

    
     {
    
     static void Main(string[] args)
    
     {
    
         int[] arr = { 5, 1, 3, 7,3,6,9,10,2};
    
         Sort(arr, 0, arr.Length - 1);
    
         foreach(int v in arr)
    
         {
    
             Console.WriteLine(v);
    
         }
    
     }
    
     static void Sort(int[] arr,int begin,int end)
    
     {
    
         if (begin > end) return;
    
         int pivot = arr[begin];//设定基准元素
    
         int i = begin, j = end;//保存起始和结尾索引下标
    
  
    
         while (i != j)
    
         {
    
             //找到一个小于pivot的值,循环结束j所在位置为小于pivot的元素所在的位置
    
             while (arr[j] >= pivot && j > i)
    
             {
    
                 j--;
    
             }
    
             //找到一个大于pivot的值,循环结束i所在位置为大于pivot的元素所在的位置
    
             while (arr[i] <= pivot&&j>i)
    
             {
    
                 i++;
    
             }
    
             if (j > i) Swap(ref arr[i], ref arr[j]);//交换上面找到的两个值
    
         }//循环结束i=j;
    
  
    
         //交换起始的基准元素到i,j所在位置,交换后基准元素左侧都小于基准元素,右侧都大于基准元素
    
         Swap(ref arr[begin], ref arr[i]);
    
         //递归排序中间元素左侧数组;
    
         Sort(arr, begin, i-1);
    
         //递归排序中间元素右侧数组;
    
         Sort(arr, i+1, end);
    
     }
    
     //利用ref传递引用,ref的变量要在声明函数外部声明;
    
     static void Swap(ref int a, ref int b)
    
     {
    
         int temp = a;
    
         a = b;
    
         b = temp;
    
     }
    
     }
    
    
    
    

全部评论 (0)

还没有任何评论哟~