首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于排序算法稳定性的困惑

2013-08-23 
关于排序算法稳定性的疑惑int [] a{6,2,2,1,5}//冒泡排序(稳定)public static void BubbleSort(int[] a,

关于排序算法稳定性的疑惑


        int [] a={6,2,2,1,5}
        //冒泡排序(稳定)
        public static void BubbleSort(int[] a, ref int count)
        {
           int n = a.Length - 1;
            int i, j;
            int tmp;
            bool isChange;
            for (i = 0; i < n; i++)
           {
              isChange = false;
              for (j = 0; j < n - i; j++)
                {
                  if (a[j] > a[j + 1])//若果条件改成a[j]>=a[j+1] 就算相邻的两个数相等位置也会发生变化
                     {
                        tmp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = tmp;
                        isChange = true;
                    }
                    count++;
                }
                if (!isChange)
                {
                    return;


                }

            }
            return;
        }
        //直接选择排序(不稳定)
        public void Dir_Choose(int[] A, int n) 
        {
            int k, t;
            for (int i = 0; i < n - 1; i++)
            {
                k = i;
                for (int j = i + 1; j < n; j++)
                {
                    if (A[j] < A[k]) k = j;
                }
                if (k != i)
                {
                    t = A[i];
                    A[i] = A[k];
                    A[k] = t;
                }
            }
        }




1、若果冒泡条件改成a[j]>=a[j+1] 相等的两个数的位置也会发生变化,怎么冒泡排序还是稳定的呢?
2、这里的选择排序,相等的两个数明显没有发生位置变化,怎么选择排序是不稳定的呢? 排序稳定性


[解决办法]

Quote: 引用:

1、若果冒泡条件改成a[j]>=a[j+1] 相等的两个数的位置也会发生变化,怎么冒泡排序还是稳定的呢?
</quote]

假设相邻的x和y相等,你让x可以越过y而继续向上冒泡,那么下一次y必定也越过x。因此是稳定的。

热点排行