标签:
排序的稳定性
如果i==j,且i在j前面,排序完成后i仍旧在j前面则这个排序算法是稳定的,否则不稳定.
多关键字排序
先按关键字1排序,关键词1相同则按2排序。。。 n
排序中的关键操作
1、比较:任意两个数据元素通过比较操作确定先后顺序。
2、交换: 数据元素之间需要交换才能得到预期结果
对于多关键字排序,只需要在比较操作时同时考虑多个关键字即可!
内排序
排序过程不需要访问外存就可以完成(数据可以全部装载到内存)
外排序
待排序数据量太大,整个排序过程不能在内存完成。
排序的审判
时间性能(主要)
主要体现在比较和交换的数量
2、辅助存储空间
完成排序需要的额外存储空间
必要时可以空间换时间
3、算法的实现复杂性
过于复杂的算法会影响代码的可读性和可维护性,也可能影响排序的性能
多关键字比较示例:
MultiCompare.c
#include <stdio.h> typedef struct _tag_DataElem { char desc[20]; int key1; int key2; } DataElem; int compare1(DataElem* ld, DataElem* rd) { int ret = 0; if( ld->key1 > rd->key1 ) { ret = 1; } else if( ld->key1 == rd->key1 ) { if( ld->key2 > rd->key2 ) { ret = 1; } if( ld->key2 < rd->key2 ) { ret = -1; } } else { ret = -1; } return ret; } int compare2(DataElem* ld, DataElem* rd) { return (ld->key1*100 + ld->key2) - (rd->key1*100 + rd->key2); } int main() { DataElem d1 = {"d1", 91, 80}; DataElem d2 = {"d2", 91, 88}; printf("Compare1 %s and %s: %d\n", d1.desc, d2.desc, compare1(&d1, &d2)); printf("Compare2 %s and %s: %d\n", d1.desc, d2.desc, compare2(&d1, &d2)); return 0; }
标签:
原文地址:http://www.cnblogs.com/siqi/p/4887936.html