체인 테이블 빠른 정렬
7385 단어 빠른 정렬
대체적인 사상은 하나의 지침수 그룹을 통해 일반적인 수 그룹으로 전환하여 신속하게 정렬하고 마지막에 체인 테이블을 다시 정리하는 것이다.
#include <iostream>
#include <vector>
using namespace std;
typedef struct NODE{
int data;
NODE* next;
NODE(int _data) : data(_data), next(nullptr){}
}NODE;
NODE* createLinkTable()
{
const int tableLen = 10;
const int testArray[tableLen] = { 12, 32, 0, 45, 2, 78, 34, 8, 365, 7 };
NODE* root = new NODE(testArray[0]);
NODE* prev = root;
for (int i = 1; i < tableLen; i++)
{
NODE* cur = new NODE(testArray[i]);
prev->next = cur;
prev = cur;
}
return root;
}
void destroyLinkTable(NODE* table)
{
NODE* iter = table;
while (iter)
{
NODE* next = iter->next;
delete iter;
iter = next;
}
}
void sortLinkTable(vector<NODE*>& linkVec,const int left,const int right)
{
if (left >= right)
{
return;
}
NODE* flag = linkVec[right];
int leftIter = left;
int rightIter = left;
for (int i = left; i < right-1; i++)
{
if (linkVec[i]->data < flag->data)
{
swap(linkVec[leftIter], linkVec[i]);
leftIter++;
}
else{
rightIter++;
}
}
if (linkVec[leftIter]->data > linkVec[right]->data)
{
swap(linkVec[leftIter], linkVec[right]);
}
sortLinkTable(linkVec, left, leftIter-1);
sortLinkTable(linkVec, leftIter + 1, right);
}
NODE* rebuildLinkTable(vector<NODE*>& linkVec)
{
NODE* root = linkVec[0];
NODE* prev = root;
for (size_t i = 1; i < linkVec.size(); i++)
{
prev->next = linkVec[i];
prev = linkVec[i];
}
prev->next = nullptr;
return root;
}
NODE* sortLinkTable(NODE* table)
{
vector<NODE*> linkVec;
NODE* cur = table;
while (cur)
{
linkVec.push_back(cur);
cur = cur->next;
}
sortLinkTable(linkVec, 0, linkVec.size()-1);
return rebuildLinkTable(linkVec);
}
void displayLinkTable(const NODE* const table)
{
const NODE* iter = table;
while (iter)
{
cout << iter->data << " ";
iter = iter->next;
}
cout << endl;
}
int main(int argc, char* argv[])
{
NODE* table = createLinkTable();
if (!table)
{
return -1;
}
displayLinkTable(table);
table = sortLinkTable(table);
displayLinkTable(table);
destroyLinkTable(table);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 거품 정렬 및 빠른 정렬 코드거품 정렬: 기본 사상: 정렬해야 할 한 조의 수에서 현재 정렬되지 않은 범위 내의 모든 수를 위에서 아래로 서로 인접한 두 수를 순서대로 비교하고 조정하여 비교적 큰 수를 아래로 가라앉히고 비교적 작은 수를 위로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.