码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构-排序

时间:2015-10-17 19:14:34      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

 

排序的稳定性
如果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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!