void perm(int* num, int i) {
int j, k, tmp;
if(i < size) {
for(j = i; j < size; j++) {
tmp = num[j];
for(k = j; k > i; k--)
num[k] = num[k-1];
num[i] = tmp;
perm(num, i+1);
for(k = i; k < j; k++)
num[k] = num[k+1];
num[j] = tmp;
}
}
else {
for(j = 0; j < size; j++)
per[n][j]=num[j]+'A';
per[n][j]='\0';
n++;
}
}
//冒泡排序:
void BubbleSort() {
for(int i=0;i<n - 1 ;i++) {
int flag = 0;
for(int j=n-1;j > i;j--) {
if(data[j] < data[j-1] ) {
swap(data[j-1],data[j]);
flag = 1;
}
}
if (flag == 0)
break;
}
}
//选择排序:
void SelectSort() {
for (int i=0;i<n-1;i++) {
int m=i;
for (int j=i+1;j<n;j++) {
if (data[j]<data[m])
m=j;
}
if (i!=m)
swap(data[i],data[m]);
}
}
//插入排序:
void InsertSort() {
int count = data.Length;
for (int i = 1 ; i < count ; i++) {
double t = data[i];
int j = i;
while (j > 0 && data[j - 1] > t) {
data[j] = data[--j];
}
data[j] = t;
}
}
//快速排序:
void ksort(int l, int h){
int e = h;
int p = l;
if (h < l + 2) return;
while (l < h) {
while (++l < e && a[l]<=a[p]);
while (--h > p && a[h]>=a[p]);
if (l < h) {
swap(a[l],a[h]);
}
}
swap(a[h],a[p]);
ksort(p, h);
ksort(l, e);
}
//希尔排序:
void ShellSort() {
int gap = 0;
while (gap<=n) {
gap = gap * 3 + 1;
}
while (gap > 0) {
for ( int i = gap; i < n; i++ ) {
int j = i - gap;
int temp = a[i];
while (( j >= 0 ) && ( a[j] > temp )) {
a[j + gap] = a[j];
j = j - gap;
}
a[j + gap] = temp;
}
gap = ( gap - 1 ) / 3;
}
}
//堆排序
int heapSize, length;
int A[100];
void max_heapify(int i) {
int l = i*2;
int r = i*2+1;
int largest;
if (l<=heapSize && A[l]>A[i])
largest = l;
else
largest = i;
if (r<=heapSize && A[r]>A[largest])
largest = r;
if (largest!=i) {
swap(A[i],A[largest]);
max_heapify(largest);
}
}
void build_heap() {
int i;
heapSize = length;
for (i=length/2;i>=1;i--)
max_heapify(i);
}
void heapSort() {
int i;
build_heap();
for (i=length; i >=2; i--) {
swap(A[1],A[i]);
heapSize--;
max_heapify(1);
}
}
排序总结+全排列
最新推荐文章于 2024-09-22 12:18:09 发布