C/C++面试题:编程实现快速排序
考点:快速排序算法的实现
出现频率:★★★★
解析:
源代码如下:
        void quick_sort(int a[], int low, int high)
        {
                int i, j, pivot;
                if (low < high)
                {
                        pivot = a[low];
                        i = low;
                        j = high;
                        while(i<j)
                        {
                                while (i<j && a[j]>=pivot)
                                        j--;
                                if(i<j)
                                        a[i++]=a[j];     //将比pivot的元素移到低端
                                while (i<j && a[i]<=pivot)
                                        i++;
                                if(i<j)
                                        a[j--] = a[i];    //将比pivot大的元素移到高端
                        }
                        a[i] = pivot;             //pivot移到最终位置
                        quick_sort(a, low, i-1);   //对左区间递归排序
                        quick_sort(a, i+1, high);  //对右区间递归排序
                }
        }
这里pivot代码基准值,它的初始值为a[low]。局部变量i和j分别代表low和high的位置。接着按照下面的步骤进行一趟交换:
(1)把比pivot的元素移到低端(low)
(2)把比pivot大的元素移到高端(high)
(3)pivot移到最终位置,此时这个位置的左边元素的值都比pivot小,而其右边元素的值都比pivot大。
(4)对左、右区间分别进行递归排序。从而把前三步的粗排序逐渐的细化,直至最终low和high交汇。
测试程序如下:
        void main()
        {
                int data[9] = {54,38,96,23,15,72,60,45,83};
                quick_sort(data, 0, 8); //快速排序
                for(int i = 0; i<9; i++)
                        cout << data[i] << " ";  //打印排序后的数组
        }
执行结果:
        15 23 38 45 54 60 72 83 96
 

更多C/C++面试题,C/C++电子书,C/C++视频请参考"爱学网izixue"