算法原理
基于二叉树的回溯排序算法,排序效率和快速排序相当。
核心代码
#include <iostream>
using namespace std;
void swap(int &a, int &b) // 实现 a、b 两个数据元素的简单交换
{
int t = a;
a = b;
b = t;
}
void swap(int &a, int &b, int &c) // 实现三个元素最少交换次数的交换,使得 a <= b <= c; 其功能实现可由三个元素交换的分类讨论中得到
{
if ((a >= b && b > c) || (a > b && b == c)) swap(a, c);
else if (a > b && b < c)
{
if (a <= c) swap(a, b);
else { swap(a, b); swap(b, c); }
}
else if (a < b && b > c)
{
if (a <= c) swap(b, c);
else { swap(b, c); swap(a, b); }
}
}
void swap(int A[], int a, int b, int c) // 此函数实现转换功能,将数组调用简化为简单三个元素的比较交换
{
swap(A[a], A[b], A[c]);
}
int sortcheck
{
check = ;
( i = ; i + < n; i += )
{
(A[i] > A[i + ]) { (A[i], A[i + ]); check++; }
(i + < n && A[i + ] > A[i + ]) check++;
}
check;
}
{
( * r + <= n)
{
(A, r - , * r - , * r);
(A, n, * r);
(A, n, * r + );
(A, r - , * r - , * r);
}
( * r == n && A[r - ] > A[ * r - ]) (A[r - ], A[ * r - ]);
}
{
count = ;
((A, n))
{
r = ;
(A, n, r);
count++;
}
count;
}
{
cout << endl << << endl;
( i = ; i < n; i++) cout << A[i] << ;
cout << endl;
cout << endl << << (A, n) << << n << << endl;
cout << endl << << endl;
( i = ; i < n; i++) cout << A[i] << ;
cout << endl;
}
{
A[] = { ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, };
(A, );
;
}

