用快速排序对下面序列按字母顺序从小到大进行排序: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec) 请给出前三次调用Partition的结果。
时间: 2023-09-17 22:12:54 浏览: 205
快速排序使用Partition函数来分割序列,这个函数会选取一个基准元素,将序列划分为两个子序列,其中一个子序列的所有元素都小于基准元素,另一个子序列的所有元素都大于或等于基准元素。然后递归地对两个子序列进行排序,直到整个序列有序。
针对这个问题,我们可以选择将字符串按照字母顺序转换为数字进行排序。比如,将 'Jan' 转换为 106 ('J' 的 ASCII 码值为 74,'a' 的 ASCII 码值为 97,'n' 的 ASCII 码值为 110,将它们相加得到 281,除以 2 得到 140.5,向下取整得到 106),将 'Feb' 转换为 146,以此类推。
对这个序列进行快速排序的过程如下:
1. 选取基准元素 'Jun',将序列分割为两个子序列:
左子序列:(Jan, Feb, Mar, Apr, May) 右子序列:(Jul, Aug, Sep, Oct, Nov, Dec)
2. 选取基准元素 'Apr',将左子序列分割为两个子序列:
左子序列:(Jan, Feb, Apr) 右子序列:(Mar, May)
3. 选取基准元素 'Nov',将右子序列分割为两个子序列:
左子序列:(Jul, Aug, Sep, Oct, Nov) 右子序列:(Dec)
前三次调用Partition的结果如下:
1. Partition(A, 0, 11)
pivot = 'Jun'
i = 0, j = 11
A[j] = 'Dec' < pivot, A[i] = 'Jan' > pivot, swap(A[i], A[j])
i = 1, j = 10
A[j] = 'Nov' > pivot, A[i] = 'Feb' > pivot, i++
A[j] = 'Oct' > pivot, A[i] = 'Mar' > pivot, i++
A[j] = 'Sep' > pivot, A[i] = 'Apr' > pivot, i++
A[j] = 'Aug' > pivot, A[i] = 'May' > pivot, i++
A[j] = 'Jul' > pivot, i++, return i-1
结果:(Jan, Feb, Mar, Apr, May) (Jun, Jul, Aug, Sep, Oct, Nov, Dec)
2. Partition(A, 0, 4)
pivot = 'Apr'
i = 0, j = 4
A[j] = 'May' > pivot, A[i] = 'Jan' < pivot, i++
A[j] = 'Mar' < pivot, swap(A[i], A[j])
i = 1, j = 3
A[j] = 'Feb' < pivot, swap(A[i], A[j])
i++, j--, return i-1
结果:(Jan, Feb, Apr) (Mar, May)
3. Partition(A, 5, 11)
pivot = 'Nov'
i = 5, j = 11
A[j] = 'Dec' < pivot, A[i] = 'Jul' < pivot, i++
A[j] = 'Oct' < pivot, A[i] = 'Aug' < pivot, i++
A[j] = 'Sep' < pivot, A[i] = 'Sep' > pivot, i++
A[j] = 'Nov' > pivot, i++, return i-1
结果:(Jul, Aug, Sep, Oct, Nov) (Dec)
阅读全文