数据结构例程——选择排序之直接选择排序

本文是[数据结构基础系列(9):排序]中第6课时[选择排序之直接选择排序]的例程。

#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //定义关键字类型
typedef char InfoType[10];
typedef struct          //记录类型
{
    KeyType key;        //关键字项
    InfoType data;      //其他数据项,类型为InfoType
} RecType;              //排序的记录类型定义
void SelectSort(RecType R[],int n)
{
    int i,j,k,l;
    RecType temp;
    for (i=0; i<n-1; i++)           //做第i趟排序
    {
        k=i;
        for (j=i+1; j<n; j++)   //在当前无序区R[i..n-1]中选key最小的R[k]
            if (R[j].key<R[k].key)
                k=j;            //k记下目前找到的最小关键字所在的位置
        if (k!=i)               //交换R[i]和R[k]
        {
            temp=R[i];
            R[i]=R[k];
            R[k]=temp;
        }
        printf("i=%d: ",i);
        for (l=0; l<n; l++)
            printf("%d ",R[l].key);
        printf("\n");
    }
}
int main()
{
    int i,n=10;
    RecType R[MaxSize];
    KeyType a[]= {9,8,7,6,5,4,3,2,1,0};
    for (i=0; i<n; i++)
        R[i].key=a[i];
    printf("排序前:");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("\n");
    SelectSort(R,n);
    printf("排序后:");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("\n");
    return 0;
}
时间: 2024-12-03 17:25:24

数据结构例程——选择排序之直接选择排序的相关文章

排序高级之选择排序_选择排序

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换.在所有的完全依靠交换去移动元素的排序方

常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)

选择类的排序算法 简单选择排序算法 采用最简单的选择方式,从头到尾扫描待排序列,找一个最小的记录(递增排序),和第一个记录交换位置,再从剩下的记录中继续反复这个过程,直到全部有序. 具体过程: 首先通过 n –1 次关键字比较,从 n 个记录中找出关键字最小的记录,将它与第一个记录交换. 再通过 n –2 次比较,从剩余的 n –1 个记录中找出关键字次小的记录,将它与第二个记录交换. 重复上述操作,共进行 n –1 趟排序后,排序结束. 如图   过程图解 令 k=i:j = i + 1: 目

Java排序算法_选择排序

选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完.算法不稳定,O(1)的额外的空间,比较的时间复杂度为O(n^2),交换的时间复杂度为O(n),并不是自适应的.在大多数情况下都不推荐使用.只有在希望减少交换次数的情况下可以用. 基本思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: ①初始状态:无序区为R[1..n],有序区为空. ②第1趟排序 在无序区R[1..n]中选出关键字最小的

c-堆栈能不能进行排序后再Peek,C++数据结构的思考题?关于堆栈的排序,谢谢

问题描述 堆栈能不能进行排序后再Peek,C++数据结构的思考题?关于堆栈的排序,谢谢 堆栈能不能进行排序后再Peek,C++数据结构的思考题?关于堆栈的排序,谢谢 解决方案 http://blog.sina.com.cn/s/blog_6f24ba210100mr13.html 解决方案二: 可以参照这个额:http://www.cnblogs.com/xy-kidult/p/3274276.html

数据结构 排序-桶排序和鸽巢排序有区别吗?为什么我感觉这两个是一样的啊

问题描述 桶排序和鸽巢排序有区别吗?为什么我感觉这两个是一样的啊 桶排序和鸽巢排序有区别吗?为什么我感觉这两个是一样的啊,求解 解决方案 鸽巢排序就是桶排序的一种变种而已.实际上"鸽巢排序"在基本的数据结构书上根本都找不到,根据google提供的解释,我看是一回事. 解决方案二: 鸽巢排序"在基本的数据结构书上根本都找不到,根据google提供的解释,我看是一回事.

c++-数据结构求解:如何列出所有的拓扑排序

问题描述 数据结构求解:如何列出所有的拓扑排序 数据结构求解:如何才能输出所有的拓扑排序,可以说下思路吗,最好可以给段代码理解. 解决方案 http://blog.csdn.net/zhangxiangDavaid/article/details/38353517 解决方案二: http://www.cnblogs.com/dolphin0520/archive/2011/04/16/2017737.html 解决方案三: http://blog.csdn.net/zhangxiangDavai

数据排序及如何动态排序

数据排序及如何动态排序 //Belltree//http://www.lurer.net/ //初学XML,错误之处多多,各路高手多多指正 在<xsl:for-each select="//item" order-by="text()">及<xsl:apply-templates select="//item"/>中都可以看到order-by属性,该属性可以对选出来的节点按照order-by的值进行排序. <sing

对Excel中数据进行单列排序和多列排序的方法

  对Excel中数据进行单列排序和多列排序的方法          1.启动Excel 2013并创建工作表,在工作表中单击选择"语文"列中的任意一个单元格,然后在"开始"选项卡的"编辑"组中单击"排序和筛选"按钮,在打开的下拉列表中选择"降序"选项,如图1所示,工作表中的数据将按照单元格所在列的数据大小进行降序排列. 图1 选择"降序"选项 2.再次单击"排序和筛选&quo

抛弃人工排序 WPS自定义巧排序

杨过自从被郭靖送上全真教并拜赵志敬为师后,赵志敬将在郭靖上受的气一股脑发泄在了杨过身上.不仅不教杨过武功,而且还派给他无数的重体力活.杨过每天只有背那几句口诀心法,完全没有学到一招半式的武功. 文字擂台:杨过被欺压 WPS显威力 每年一度检验弟子学艺情况的比试到了,首先对阵的就是杨过和平时欺压他成为习惯的大师兄清笃.在比试开始前师叔宣布了本场比试的题目:对本次比赛学员的花名册按照百家姓进行排列.开始的时候杨过靠着小聪明和清笃的轻敌,骗得清笃失了先机,居然开始的时候被杨过领先了. 但是没有学过Of