数据结构 C语言JAVA语言 实现直接选择排序

用了引用 在c++环境中调试

 

其实不稳定算法常见的只有四个,大家只要把这四个记住了。剩下的可以认为都是稳定的。

不稳定算法记忆口诀 “快些选队” 快:快速排序 些:希尔排序 选:选择排序 队:堆排序

#include<stdio.h>

#define MaxSize 20  //顺序表最大长度

typedef int KeyType;  //typedef定义关键字类型为(int)
typedef int InfoType;


typedef struct
{
    KeyType key;  //关键字项
    InfoType otherinfo;  //其他数据项
}RedType;

typedef struct
{
    RedType r[MaxSize + 1];  //r[0]闲置或做哨兵单元
    int length;  //顺序表的长度
}SqList;  //顺序表类型

 

 

//直接选择排序
void selectSort(SqList &s) {
    int i,k,j;
    for (i = 1; i < s.length;i++) {
        k = i;
        for (j = i + 1; j <= s.length;j++) {
            if (s.r[j].key<s.r[k].key) {
                k = j;
            }
        }

        if (k != i) {
            s.r[0] = s.r[i];
            s.r[i] = s.r[k];
            s.r[k] = s.r[0];
        }
    }

}

 

int main()
{
    SqList L;
    L.length = 10;
    L.r[1].key = 45;
    L.r[2].key = 53;
    L.r[3].key = 18;
    L.r[4].key = 49;
    L.r[5].key = 36;
    L.r[6].key = 76;
    L.r[7].key = 13;
    L.r[8].key = 97;
    L.r[9].key = 36;
    L.r[10].key = 32;
    for (int i = 1; i <= L.length; i++)
        printf("%d  ", L.r[i].key);
    printf("\n");
    selectSort(L);

    for (int i = 1; i <= L.length; i++)
        printf("%d  ", L.r[i].key);
}

JAVA 实现

 

//直接排序
public class ZhiJieSort {

    static void selectSort(List<Integer> list) {
        int h = list.size();
        int k = 0;
        int tem = 0;
        for (int i = 0; i < h - 1; i++) {
            k = i;
            tem = list.get(i);
            for (int j = i + 1; j < h; j++) {
                if (list.get(j) < list.get(k)) {
                    k = j;
                }
            }
            //正确的赋值
            if (i != k) {
                list.set(i, list.get(k));
                list.set(k, tem);//k值给正确的值
            }
        }
    }


    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(0, 45);
        list.add(1, 36);
        list.add(2, 72);
        list.add(3, 18);
        list.add(4, 53);
        list.add(5, 31);
        list.add(6, 48);
        list.add(7, 36);

        System.out.println("直接选择排序:");
        System.out.println("排序前:");
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
        selectSort(list);
        System.out.println("排序后:");
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
    }


}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值