【.NET】Array.Sort排序源码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/It_sharp/article/details/84062757
/*      */   public static void sort(int[] paramArrayOfInt)
/*      */   {
/*   96 */     sort1(paramArrayOfInt, 0, paramArrayOfInt.length);
/*      */   }
 
//
 
/*      */   private static void sort1(int[] paramArrayOfInt, int paramInt1, int paramInt2)
/*      */   {
/*  558 */     if (paramInt2 < 7) {
/*  559 */       for (i = paramInt1; i < paramInt2 + paramInt1; i++)
/*  560 */         for (j = i; (j > paramInt1) && (paramArrayOfInt[(j - 1)] > paramArrayOfInt[j]); j--)
/*  561 */           swap(paramArrayOfInt, j, j - 1);
/*  562 */       return;
/*      */     }
/*      */     
/*      */ 
/*  566 */     int i = paramInt1 + (paramInt2 >> 1);
/*  567 */     if (paramInt2 > 7) {
/*  568 */       j = paramInt1;
/*  569 */       k = paramInt1 + paramInt2 - 1;
/*  570 */       if (paramInt2 > 40) {
/*  571 */         m = paramInt2 / 8;
/*  572 */         j = med3(paramArrayOfInt, j, j + m, j + 2 * m);
/*  573 */         i = med3(paramArrayOfInt, i - m, i, i + m);
/*  574 */         k = med3(paramArrayOfInt, k - 2 * m, k - m, k);
/*      */       }
/*  576 */       i = med3(paramArrayOfInt, j, i, k);
/*      */     }
/*  578 */     int j = paramArrayOfInt[i];
/*      */     
/*      */ 
/*  581 */     int k = paramInt1;int m = k;int n = paramInt1 + paramInt2 - 1;int i1 = n;
/*      */     for (;;) {
/*  583 */       if ((m <= n) && (paramArrayOfInt[m] <= j)) {
/*  584 */         if (paramArrayOfInt[m] == j)
/*  585 */           swap(paramArrayOfInt, k++, m);
/*  586 */         m++;
/*      */       } else {
/*  588 */         while ((n >= m) && (paramArrayOfInt[n] >= j)) {
/*  589 */           if (paramArrayOfInt[n] == j)
/*  590 */             swap(paramArrayOfInt, n, i1--);
/*  591 */           n--;
/*      */         }
/*  593 */         if (m > n)
/*      */           break;
/*  595 */         swap(paramArrayOfInt, m++, n--);
/*      */       }
/*      */     }
/*      */     
/*  599 */     int i3 = paramInt1 + paramInt2;
/*  600 */     int i2 = Math.min(k - paramInt1, m - k);vecswap(paramArrayOfInt, paramInt1, m - i2, i2);
/*  601 */     i2 = Math.min(i1 - n, i3 - i1 - 1);vecswap(paramArrayOfInt, m, i3 - i2, i2);
/*      */     
/*      */ 
/*  604 */     if ((i2 = m - k) > 1)
/*  605 */       sort1(paramArrayOfInt, paramInt1, i2);
/*  606 */     if ((i2 = i1 - n) > 1) {
/*  607 */       sort1(paramArrayOfInt, i3 - i2, i2);
/*      */     }
/*      */   }
/*      */   
/*      */ 
/*      */   private static void swap(int[] paramArrayOfInt, int paramInt1, int paramInt2)
/*      */   {
/*  614 */     int i = paramArrayOfInt[paramInt1];
/*  615 */     paramArrayOfInt[paramInt1] = paramArrayOfInt[paramInt2];
/*  616 */     paramArrayOfInt[paramInt2] = i;
/*      */   }

猜你喜欢

转载自blog.csdn.net/It_sharp/article/details/84062757