아래 코드에는 알파벳 문자를 키로 포함하고 이와 관련된 임의의 값을 포함하는 연관 배열이 있습니다. 값을 내림차순으로 정렬하는 빠른 정렬 기능을 구현했습니다. 특정 키 (문자)를 검색하는 이진 검색 기능이 있습니다. 이진 검색은 정렬하기 전에 잘 작동하지만 정렬 한 후에는 일부 문자 만 사용됩니다. 직접 작업하려고 시도하면서 quickSort ()를 실행하기 전후에 배열을 반복했으며 해당 값이 정렬되었지만 여전히 존재하는지 확인하는 것 같습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
#include <iostream>
#include <array>
using namespace std;
int binarySearch(int arr[][2], int value, int left, int right)
{
while (left <= right)
{
int middle = (left + right) / 2;
if (arr[middle][0] == value)
return middle;
else if (arr[middle][0] > value)
right = middle - 1;
else
left = middle + 1;
}
return -1;
}
void quickSort(int arr[][2], int left, int right)
{
int i = left, j = right;
int tmp1, tmp2;
int pivot = arr[(left + right) / 2][1];
/* partition */
while (i <= j)
{
while (arr[i][1] > pivot)
i++;
while (arr[j][1] < pivot)
j--;
if (i <= j)
{
tmp1 = arr[i][0];
tmp2 = arr[i][1];
arr[i][0] = arr[j][0];
arr[i][1] = arr[j][1];
arr[j][0] = tmp1;
arr[j][1] = tmp2;
i++;
j--;
}
};
/* recursion */
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}
int main()
{
const int alphLength = 26;
int assocArr[alphLength][2] = { {'A', 5}, {'B', 2}, {'C', 4}, {'D', 3}, {'E', 1}, {'F', 0}, {'G', 0}, {'H', 0}, {'I', 0},
{'J', 0}, {'K', 0}, {'L', 0}, {'M', 0}, {'N', 0}, {'O', 0}, {'P', 75}, {'Q', 0}, {'R', 0},
{'S', 0}, {'T', 0}, {'U', 0}, {'V', 0}, {'W', 0}, {'X', 50}, {'Y', 0}, {'Z', 100} };
char a;
char searchLetter = 'Z';
for (int i = 0; i < alphLength; i++)
{
a = assocArr[i][0];
cout << "index " << i << ": " << a << endl;
}
cout << "found " << searchLetter << " before quickSort() at " << binarySearch(assocArr, searchLetter, 0, alphLength-1) << endl;
quickSort(assocArr, 0, alphLength-1);
for (int i = 0; i < alphLength; i++)
{
a = assocArr[i][0];
cout << "index " << i << ": " << a << endl;
}
cout << "found " << searchLetter << " after quickSort() at " << binarySearch(assocArr, searchLetter, 0, alphLength-1) << endl;
}
이진 검색은 정렬 된 배열에서만 작동하며 검색에서 비교하는 데 사용하는 것과 동일한 기준으로 정렬해야합니다. 배열은 문자 오름차순으로 정렬되고 이진 검색은 문자 오름차순으로 검색하므로 작동합니다. 그런 다음 값을 기준으로 정렬하면 문자가 뒤섞입니다. 그런 다음 문자 오름차순으로 이진 검색을 다시 수행하면 배열이 더 이상 문자 오름차순으로 정렬되지 않기 때문에 작동하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다