我不确定出了什么问题,但这不是正确的排序。
这是实现:
int quickSort(std::string **arr, int left, int right)
{
static int swaps;
int i = left, j = right;
std::string *tmp;
std::string pivot = *arr[(left + right) / 2]; //middle element
//partition
while( i <= j ) {
while ((*arr[i]).compare(pivot) < 0) {
i++;
}
while ((*arr[j]).compare(pivot) < 0) {
j--;
}
if ( i <= j ) {
swaps++;
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
//recursion
if ( left < j ) {
quickSort(arr, left, j);
}
if ( i < right ) {
quickSort(arr, i, right);
}
return swaps;
}
arr
是一个字符串指针数组。每个索引指向一个字符串,在这种情况下,字符串都是名称。该方法肯定是进行交换,我只是无法理解它到底在做什么。
例如,给定这些初始值:
Pointer Value
0055B5D8 - JAMES
0055B3F8 - JOHN
0055C808 - ROBERT
0055C8A8 - MICHAEL
0055CB88 - WILLIAM
0055CC28 - DAVID
0055CCC8 - RICHARD
0055CD68 - CHARLES
0055CE08 - JOSEPH
0055CEA8 - THOMAS
我的quickSort
方法始终将它们按以下顺序移动:
Pointer Value
0055C8A8 - MICHAEL
0055B5D8 - JAMES
0055C808 - ROBERT
0055B3F8 - JOHN
0055CB88 - WILLIAM
0055CEA8 - THOMAS
0055CE08 - JOSEPH
0055CD68 - CHARLES
0055CCC8 - RICHARD
0055CC28 - DAVID
“未排序”列表具有按升序排列的指针,因为我将所有这些指针一个接一个地分配以构建初始数组。但是“排序”列表似乎根本没有排序。
为清楚起见,目标是按字母顺序排列名称列表。