체인 테이블 빠른 정렬
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 버전 정렬 알고리즘의 빠른 정렬 예본고는 JAVA의 빠른 정렬 실현 방법을 실례로 다루고 있다.다음과 같이 여러분에게 참고할 수 있도록 공유합니다. 본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.