一.定义:
排序元素较大,不易直接交换,所以采用间接排序,通过交换指针来实现。
二.算法描述:
定义一个指针数组作为“表”,通过比较表中地址的值来交换地址,使得如果仅要求按顺序输出,则输出a[table[0]],a[table[1]],a[table[2]]...a[table[n - 1]]。
三.代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef int Status;
#define OK 1
#define ERROR 0
int *table;
/* 表排序,通过数组指针对数组进行间接排序 */
Status Table_Sort(int a[], int n)
{
int i, j, min, index, temp;
if(!(table = (int*)malloc(n * sizeof(int))))
exit(1);
for(i = 0; i < n; i++)
table[i] = i;
for(i = 0; i < n - 1; i++) {
min = a[table[i]];
index = i;
for(j = i + 1; j < n; j++) {
if(a[table[j]] < min) {
min = a[table[j]];
index = j;
}
}
temp = table[i];
table[i] = table[index];
table[index] = temp;
}
return OK;
}
int main()
{
int i;
int a[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
for(i = 0; i < sizeof(a) / sizeof(a[0]); i++)
printf("%d ", a[i]);
printf("\n");
Table_Sort(a, sizeof(a) / sizeof(a[0]));
for(i = 0; i < sizeof(a) / sizeof(a[0]); i++)
printf("%d ", a[table[i]]);
printf("\n");
system("pause");
return 0;
}