zoukankan      html  css  js  c++  java
  • 数据结构 排序(选择排序)

    //排序--选择排序法
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>
    
    /*
    选择排序(Selection sort)是一种简单直观的排序算法。
    它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,
    存放在序列的起始位置,直到全部待排序的数据元素排完。
    选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
    
    
    
    选择排序 创建一个有序数组A,
    第一步:找出无序数组B中的最小的元素  把他放置在有序数组A的第一个位置,从无序数组B中将该元素删除
    第二步:继续找出无序数组B中的最小的元素  把他放置在有序数组A的第二个位置,从无序数组B中将该元素删除
    
    选择排序&冒泡排序&插入排序:
    
    选择排序每一轮都会遍历无序数组一遍,
    插入排序每一轮都会遍历有序数组一遍,
    冒泡排序不存在有序数组和无序数组的概念,只是通过相邻元素的交换 将最值元素放到数组的一端
    */
    
    //选择法排序
    void SelectionSort(int * arr, int num){
        if (arr==NULL)
        {
            printf("传入参数不可以为空!
    ");
            return;
        }
        int i = 0, j = 0,k=0,temp=0;
        for (i = 0; i < num; i++)
        {
            //假设k是最小元素的下标
            k = i;
            for (j = i+1; j < num; j++)
            {
                //k初始化为0  当j=1是 正好是arr[0] vs arr[1]  没有漏掉任何一个元素
                if (arr[j]<arr[k])
                {
                    //发现比下标为k的元素 更小的元素  改变k的值
                    //改变之后  k这个下标的元素现在是最小的了
                    k = j;
                }
            }
            //交换最小元素和第0个元素的值---一轮循环完了再进行交换
            if (k != i)
            {
                temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }
        }
    }
    
    //打印数组
    void Print(int * arr,int num){
        if (arr == NULL)
        {
            printf("传入参数不可以为空!
    ");
            return;
        }
        int i = 0;
        for (int i = 0; i < num; i++)
        {
            printf("%5d", *(arr + i));
        }
        printf("
    ");
    }
    
    void Test(){
        int i = 0;
        int arr[10] = { 0 };
        //定义时间类型变量
        time_t ts;
        //生成随机数种子
        srand((unsigned int)time(&ts));
        for (i = 0; i < 10; i++)
        {
            arr[i] = (int)(rand() % 100);
        }
        //打印数组
        printf("
    原始数据----
    ");
        Print(arr, 10);
        //选择法排序
        printf("选择法排序之后的数据
    ");
        SelectionSort(arr, 10);
        Print(arr, 10);
    }
    
    void main(){
        Test();
        system("pause");
    }

  • 相关阅读:
    这一次,Google 终于对 Web 自动化下手了!
    移动端自动化 AutoJS 快速入门指南
    App 端自动化的最佳方案,完全解放双手!
    快过年了,如何使用 AutoJS 自动化快速抢微信红包!
    字节面试问我如何高效设计一个LRU,当场懵
    当前大厂笔试最高频的十道算法题
    coding game, 边打游戏边学编程,是一种怎么样的体验?
    一文详解面试常考的TopK问题
    动态规划,这几个问题最常见!
    备战蓝桥杯,你可以这么准备
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5741067.html
Copyright © 2011-2022 走看看