数据结构基础7.6:表排序

来源:互联网 发布:sql属于什么数据库语言 编辑:程序博客网 时间:2024/06/15 01:32

一.定义:

排序元素较大,不易直接交换,所以采用间接排序,通过交换指针来实现。

二.算法描述:

定义一个指针数组作为“表”,通过比较表中地址的值来交换地址,使得如果仅要求按顺序输出,则输出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 0int *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;}


0 0