交换顺序,要用指针完成,且要怎么用指针交换数值?

所谓交换,就是序列中任意两个元素进行比较,根据比较结果来交换各自在序列中的位置,以此达到排序的目的。
快速排序的思想很简单,就是先把待排序的数组拆成左右两个区间,左边都比中间的基准数小,右边都比基准数大。接着左右两边各自再做同样的操作,完成后再拆分再继续,一直到各区间只有一个数为止。
举个例子,现在我要排序 4、9、5、1、2、6 这个数组。一般取首位的 4 为基准数,第一次排序的结果是:
可能有人觉得奇怪,2 和 1 交换下位置也能满足条件,为什么 2 在首位?这其实由实际的代码实现来决定,并不影响之后的操作。
以 4 为分界点,对 2、1、4 和 5、9、6 各自排序,得到
不用管左边的 1、2、4 了,将 5、9、6 拆成 5 和 9、6,再排序,至此结果为
为什么把快排划到交换排序的范畴呢?因为元素的移动也是靠交换位置来实现的。
大体思路已经有了,接下来就是具体实现。
相信大家已经看出来了,算法的实现需要用到递归(拆分区间之后再对每个区间作同样的操作)。所有关于算法实现的阐述仅以一次排序为例。
基准数一般取数组首位的数,而最终基准数是要放在中间位置的。我们使用一个临时变量 stard 来保存选取的基准值,其余元素根据比较结果决定是否交换位置。
我们分别得到数组的首元素和尾元素的下标,作为头指针和尾指针。先尾指针开始,如果对应的数比基准值大,尾指针向前移动,直到遇到比基准值小的为止。此时将尾指针和头指针对应的数值进行交换。轮到头指针,如果对应的数比基准值小,头指针向后移动,直到遇到比基准值大的为止。此时将尾指针和头指针对应的数值进行交换。再到尾指针,再到头指针,直到头尾指针重合为止。此时将 stard

}

这用指针的形式比不用指针的形式的好处怎么在程序中体现啊,就是可以用个函数来表示a,b是怎么变化的,它们怎么复制啊。

}

我要回帖

更多关于 怎么用指针交换数值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信