スタックソートはどんな体験ですか
3839 ワード
時間の複雑さ:O(n*logn)は特にデータ量が大きい場合(百万級データ)に適している.高速並べ替えと集計並べ替えはいずれも再帰に基づいているため,データ量が大きい場合にスタックオーバーフローが発生しやすい.ソート速度は速い列よりやや低い.不安定なソートアルゴリズムでもある.例えば、3 27 27 36は、スタックトップ3が先に出力されると、第3層(最後の27)がスタックトップに走り、その後スタックが安定し、スタックトップを出力し続け、さっきの27であり、これは、後の27が第2の位置の27より先に出力され、不安定であることを示している.
#include
using namespace std;
typedef struct SqList
{
int r[10] = {1,8,12,3,14,5,13,15,23,45};
int length = 9;
}SqList;
void m_swap(SqList *L ,int s ,int m)//s,m
{
int temp = L -> r[s];
L -> r[s] = L -> r[m];
L -> r[m] = temp ;
}
void HeapAdjust(SqList *L , int s , int m)//
{
int temp ,j;
temp = L -> r[s];
for( j = 2 * s ;j <= m; j *= 2)//
{
if(j < m && L->r[j] < L->r[j + 1])
++j;//j
if(temp >= L->r[j])
break;
L->r[s] = L->r[j];
s = j;
}
L->r[s] = temp;//
}
void HeapSort(SqList *L)
{
int i;
for(i = L->length / 2; i > 0; i--)
HeapAdjust(L , i , L->length);// L
for(i = L->length; i > 1; i--)
{
m_swap(L,1,i);//
HeapAdjust(L, 1 ,i - 1);//
}
}
int main()
{
SqList L;
for(int i = 0; i < 10; i++)
{
cout << L.r[i] << " ";
}
cout << endl;
HeapSort(&L);
for(int i = 0; i < 10; i++)
{
cout << L.r[i] << " ";
}
cout << endl;
}