Titan笔记

  • 首页
  • Java
  • 数据结构
  • Web
  • C语言
  • Python
  • 杂谈
  • 逸笔挥墨
Titan笔记
分享学习、研究与开发过程中的点滴记忆
  1. 首页
  2. C语言
  3. 正文

[算法] 数组排序 - 冒泡排序法与直接选择排序法

2020年2月23日 312点热度 3人点赞 0条评论

花时间研究了一下两种不同的排序算法,下面给出介绍。

1 . 冒泡排序算法

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

#include<stdio.h>

int a[10];

void sort(int a[],int n){
    for(int i=1;i<n;i++){
        for(int j=0;j<n-i;j++){
            if(a[j]>a[j+1]){
                int temp=a[j+1];
                a[j+1]=a[j];
                a[j]=temp;
            } 
        } 
    }
}
void printArray(int a[],int n){
    for(int i=0;i<n;i++){
        printf("%d",a[i]);
        if(i!=n-1){
            printf(" ");
        }
    }
}
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]); 
    }
    sort(a,n);
    printArray(a,n);
}

2. 直接选择排序法

选择排序是一种简单直观的排序算法。

其基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

#include<stdio.h>
// 直接选择排序法 
int a[10];

void sort(int a[],int n){
    int index;
    for(int i=1;i<n;i++){
        index=0;
        for(int j=1;j<=n-i;j++){
            if(a[j]>a[index]){
                index=j;
            }
        }
        //交换位置在 n-i 和 index(最大值) 上的两个数
        int temp=a[n-i];
        a[n-i]=a[index];
        a[index]=temp; 
    }
}
void printArray(int a[],int n){
    for(int i=0;i<n;i++){
        printf("%d",a[i]);
        if(i!=n-1){
            printf(" ");
        }
    }
}
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]); 
    }
    sort(a,n);
    printArray(a,n);
}

总结

两种算法都很基础,但是思考的方向还是有着些许差异的。 另外想要更快的去解决排序问题的话,可以下功夫去研究一下库里面的 qsort函数,也非常的实用!

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: C语言 C语言算法
最后更新:2020年2月23日

Titan

兴趣广泛而无一精擅
想到什么,我总是渴望以代码的方式去呈现
永远年轻,永远热泪盈眶
Stay Hungry, Stay Foolish

点赞
下一篇 >

文章评论

取消回复

Titan

兴趣广泛而无一精擅
想到什么,我总是渴望以代码的方式去呈现
永远年轻,永远热泪盈眶
Stay Hungry, Stay Foolish

逸笔挥墨 - Titan的文学天地
文章分类
  • C语言 (4)
  • Hadoop (1)
  • Hive (3)
  • Java (18)
  • JavaWeb (3)
  • Linux运维之道 (1)
  • Mybatis学习笔记 (3)
  • Python (3)
  • SpringCloud (3)
  • Web (5)
  • Web前端 (4)
  • Web后端 (5)
  • 数据库 (1)
  • 数据结构 (10)
  • 杂谈 (3)
  • 诗词歌赋 (1)
  • 随摘 (2)
最新 热点 随机
最新 热点 随机
Spring Cloud 微服务学习笔记 - Eureka 服务注册与发现 Spring Cloud 微服务学习笔记 - IDEA工程搭建 关于我和Titan笔记 Spring Cloud 微服务学习笔记 - 开篇 TitanEMS - Titan企业员工管理系统 - JavaWeb期末实践项目 Linux 网络优化指南 - 改善Linux的网络性能
Spring Cloud 微服务学习笔记 - 开篇TitanEMS - Titan企业员工管理系统 - JavaWeb期末实践项目2021年1月随摘2021年1月诗摘关于我和Titan笔记《梦之浮桥》中的几句
(三) Mybatis动态SQL语句 关于Hive使用的一些实例 Java中对文件进行MD5加密 Spring与Mybatis的整合 Spring Cloud 微服务学习笔记 - 开篇 [Python] 关于 asyncio 与 aiohttp 协程并发的探索
标签聚合
Java 二叉树 数据结构 Apache-Hive JavaWeb Python Mybatis学习笔记 链式存储
友情链接
  • Mttblog

COPYRIGHT © 2016 - 2021 Titan笔记. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

豫ICP备20001822号-1

豫公网安备 41010502004418号