【软考】之算法- 快速排序

快速排序基本思想:通过一趟排序将待排序的记录划分为独立的两个部分,其中一部分记录的关键字均不大于另一部分的关键字,然后再分别对着两部分记录继续进行快速排序,以达到整个序列有序。


代码实现:

class QuickSort
    {
         public int[] QuickSorts(int[] data,int low,int high)
         //用快速排序方法对数组元素data[low...high]做非递减排序
        {
            int i, pivotkey, j; //以数组的第一个元素为基准(枢轴元素)进行划分
            if (low<high)
            {
                pivotkey = data[low];
                i = low;
                j = high;
                 
                while (i<j) //从数组两端交替向中间扫描
                {
                    while (i < j && data[j] > pivotkey) j--; //这段代码是为了循环出data[j] < pivotkey时的j,将j指向i所指的数,并把j的位置往前移动1位
                    if (i<j)
                    {
                        data[i++] = data[j];
                    }
                    while (i < j && data[i] <= pivotkey) i++;//这段代码是为了循环出data[i] > pivotkey时的i,将i指向j所指的数,并把i的位置往后移动1位
                    if (i<j)
                    {
                        data[j--]=data[i];
                    }
                    data[i] = pivotkey;//把基准(枢轴元素)赋给i所指的数
                    QuickSorts(data, low, i - 1);//对前半个表进行快速排序
                    QuickSorts(data, i + 1, high);//对后半个表进行快速排序
                }

            }
            return data;
        }
    }

在主函数中调用:

static void Main(string[] args)
        {
            int[] data = {55, 28, 46, 54};
            QuickSort quickSort = new QuickSort();
            int[] data1 = quickSort.QuickSorts(data, 0, 3);
            for (int i = 0; i < data1.Length; i++)
            {
                Console.WriteLine(data1[i]);
            }
            Console.Read();
        }        

结果:



你可能感兴趣的:(【软考】之算法- 快速排序)