鏈式基數排序

2021-06-22 07:41:49 字數 1893 閱讀 7929

/* c1.h (程式名) */

#include#include#include/* malloc()等 */

#include/* int_max等 */

#include/* eof(=^z或f6),null */

#include/* atoi() */

#include/* eof() */

#include/* floor(),ceil(),abs() */

#include/* exit() */

/* 函式結果狀態** */

#define true 1

#define false 0

#define ok 1

#define error 0

#define infeasible -1

/* #define overflow -2 因為在math.h中已定義overflow的值為3,故去掉此行 */

typedef int status; /* status是函式的型別,其值是函式結果狀態**,如ok等 */

typedef int boolean; /* boolean是布林型別,其值是true或false */

typedef int elemtype;

/* alg10-11.c 鏈式基數排序 */

typedef int infotype; /* 定義其它資料項的型別 */

typedef int keytype; /* 定義redtype型別的關鍵字為整型 */

typedef struct

redtype; /* 記錄型別(同c10-1.h) */

typedef char keystype; /* 定義關鍵字型別為字元型 */

#define max_num_of_key 8 /* 關鍵字項數的最大值 */

#define radix 10 /* 關鍵字基數,此時是十進位制整數的基數 */

#define max_space 1000

typedef struct

slcell; /* 靜態鍊錶的結點型別 */

typedef struct

sllist; /* 靜態鍊錶型別 */

typedef int arrtype[radix]; /* 指標陣列型別 */

#include "linkradix.h"

void initlist(sllist *l, redtype d, int n)

}void radixsort(sllist *l)

}void print(sllist l)

}void sort(sllist l, int adr) /* 改此句(型別) */

}void rearrange(sllist *l, int adr) /* 改此句(型別) */

(*l).r[j] = (*l).r[0];

adr[j] = j; }}

#define n 10

void main()

, , , , , , , , , };

sllist l;

int *adr;

initlist(&l, d, n);

printf("排序前(next域還沒賦值):\n");

print(l);

radixsort(&l);

printf("排序後(靜態鍊錶):\n");

print(l);

adr = (int*)malloc((l.recnum)*sizeof(int));

sort(l, adr);

rearrange(&l, adr);

printf("排序後(重排記錄):\n");

print(l);

}

鏈式基數排序

將乙個關鍵字,如278,分為三個關鍵字 2 7 8 把待排元素按某一位從低到高新增到相應的f e中,其實f和e只是指向頭尾兩個元素,鍊錶的連線關係實際上是通過修改r的next指標實現的。created by dgm on 19 4 23.include define maxnum 10000 def...

資料結構 內部排序 鏈式基數排序

沒做這個演算法之前覺得靜態鍊錶沒什麼用,寫了這個演算法才發現原來靜態鍊錶是如此的巧妙,才發現之前的看法是多麼的淺薄無知,看來以後還要更虛心了,嘿嘿.基數排序,關鍵是兩個過程,分配和 分配是按關鍵字順序將記錄進行分類為,是將分配過程中順序打亂的記錄重新鏈結成靜態鍊錶。這樣從按一定順序對關鍵字進行分配和...

排序 基數排序

基數排序 radix sort 是屬於 分配式排序 distribution sort 基數排序法又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用。排序思想 首先按照資料的最低位 個位 將資料分配到0 9...