C语言排序(冒泡排序、选择排序、插入排序和快速排序)

C语言排序(冒泡排序、选择排序、插入排序和快速排序)C语言排序(冒泡排序、选择排序、插入排序和快速排序)C语言排序什么是排序?1.冒泡排序基本思想主要思路:动态示例demo2.选择排序基本思想主要思路动态示例demo3.插入排序基本思想主要思路动态示例demo4.快速排序基本思想主要思路动态示例demoC语言排序什么是排序?就是将无序的变成有序的1.冒泡排序基本思想在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,

大家好,又见面了,我是你们的朋友全栈君。

C语言排序

什么是排序?

就是将无序的变成有序的

1.冒泡排序

基本思想

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。每一趟排序后的效果都是讲没有沉下去的元素给沉下去。

主要思路:

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

demo

#include <stdio.h>

//冒泡排序
void BubbleSort(int arry[],int len)
{ 
   
        int i;
        int j;
        int temp;
        for(i=0;i<len-1;i++)//比较次数
        { 
   
                for(j=0;j<len-1-i;j++)//比较过程
                { 
   
                        if(arry[j]>arry[j+1]) //比较大小
                        { 
   
                                temp=arry[j];
                                arry[j]=arry[j+1];
                                arry[j+1]=temp;

                        }
                }

        }

}
//输出
void print(int arry[],int len)
{ 
   
        int i;
        for(i=0;i<len;i++)
        { 
   
                printf("%d ",arry[i]);
        }
}
int main()
{ 
   

        int arry[10]={ 
   9,3,56,44,77,88,54,79,52,111};

        BubbleSort(arry,10);
        print(arry,10);
        printf("\n");

        return 0;
}

在这里插入图片描述

2.选择排序

基本思想

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

主要思路

每一次从无序组的数据元素中选出最小的一个元素,存放在无序组的起始位置,无需组的元素减少,有序组的元素增加,直到全部待排序的数据元素排完。

demo

#include <stdio.h>

//选择排序
void selectSort(int arry[], int len)
{ 
          int i;
        int j;
        for ( i = 0; i < len-1; i++)
        { 
   
                int min = i;//假设第一个元素是最小的
                for (j = i + 1; j < len; j++)
                { 
   
                        if (arry[j] < arry[min])
                        { 
   
                                min = j;//保存最小元素的下标
                        }
                }
                //交换
                int temp = arry[min];
                arry[min] = arry[i];
                arry[i] = temp;
        }
}
//输出
void print(int arry[], int len)
{ 
   
        for (int i = 0; i < len; i++)
        { 
   
                printf("%d ", arry[i]);
        }
}
int main()
{ 
   
        int arry[10]={ 
   15,36,26,27,24,46,44,29,52,48};
        selectSort(arry,10);
        print(arry,10);


        printf("\n");
        return 0;
}

在这里插入图片描述

3.插入排序

基本思想

将待排序的无序数列看成是一个仅含有一个元素的有序数列和一个无序数列,将无序数列中的元素逐次插入到有序数列中,从而获得最终的有序数列。

主要思路

插入排序是最简单常用的方法,将数组分为两部分,排好序的数列,以及未排序的数列,将未排序的数列中的元素 与排好序的数列进行比较,然后将该元素插入到已排序列的合适位置中。

demo

#include <stdio.h>

//插入排序
void insertSort(int arry[], int len)
{ 
   
        int i;
        int temp;//保存要插入的元素
        int j;//从当前要要比较插入的元素的前面一个开始
        for ( i = 1; i < len; i++)//第一个元素视为有序,把后面的元素一个一个的插入到前面
        { 
   
                temp = arry[i];
                j = i - 1;
                while (j >= 0&&arry[j]>temp)
                { 
   
                        arry[j + 1] = arry[j];//前面的元素往后面移动
                        j--;
                }
                arry[j + 1] = temp;//把要插入的元素,插入进对应的位置
        }
}
//输出
void print(int arry[], int len)
{ 
   
        for (int i = 0; i < len; i++)
        { 
   
                printf("%d ", arry[i]);
        }
}
int main()
{ 
   
        int arry[10]={ 
   3,44,38,5,47,15,36,26,27,2};
        insertSort(arry,10);
        print(arry,10);


        printf("\n");
        return 0;
}

在这里插入图片描述

4.快速排序

基本思想

快速排序算法的基本思想为分治思想。
先从数列中取出一个数作轴值(基准数)pivot;
根据基准数将数列进行分区,小于基准数的放左边,大于基准数的放右边;
重复分区操作,知道各区间只有一个数为止。

主要思路

快速排序是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的值都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n – 1 个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。所以快速排序算法的核心算法是分区操作,及如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

demo

#include <stdio.h>
//快速排序
void quickSort(int arry[], int low, int high)
{ 

if (low > high)
{ 

return;
}
int i = low, j = high, temp = arry[i];//获取左右和基准数
while (i < j)
{ 

while (temp < arry[j] && i < j)
{ 

j--;
}
if (i < j)
{ 

arry[i++] = arry[j];
}
while (temp>arry[i] && i < j)
{ 

i++;
}
if (i < j)
{ 

arry[j--] = arry[i];
}
}
arry[i] = temp;
quickSort(arry, low, i - 1);//左边
quickSort(arry, i + 1, high);//右边
}
//输出
void print(int arry[], int len)
{ 

for (int i = 0; i < len; i++)
{ 

printf("%d ", arry[i]);
}
}
int main()
{ 

int arry[15]={ 
7,44,38,99,47,15,36,26,27,2,46,43,19,50,48};
quickSort(arry,0,14);
print(arry,15);
printf("\n");
return 0;
}        

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153023.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 上位机plc编程入门_【新手入门】西门子PLC编程入门学习

    上位机plc编程入门_【新手入门】西门子PLC编程入门学习一、S7-200PLC的硬件结构及系统构成、安装与接线学习1、学习什么内容?重点学习什么内容?(1)PLC的硬件结构(2)PLC的系统构成及CPU和模块参数(3)PLC的选型,安装及接线(重点)2、如何进行学习(学练结合)(1)学习S7-200从入门到精通的第一章内容(2)PLC是技术是一门实践性很强的技术,所有需要用于一台PLC,熟悉PLC的硬件结构,练习PLC与外围设备的接线链接。建议使用技…

  • resnet网络结构示意图_resnet50网络结构详解

    resnet网络结构示意图_resnet50网络结构详解代码importtorchfromtorchimportnnimporttorchvisiondevice=torch.device(“cuda”iftorch.cuda.is_available()else”cpu”)resnet=torchvision.models.resnet101(pretrained=True)#pretrainedImageNetResNet-101print(resnet)输出:ResNet((conv1):Con

  • 【15】进大厂必须掌握的面试题-容器化和虚拟化面试

    Q1。什么是容器? 我的建议是首先解释对容器化的需求,容器用于提供一致的计算环境,从开发人员的笔记本电脑到测试环境,从过渡环境到生产环境。 现在给出容器的定义,一个容器包含一个完整…

    2020年10月23日
  • ProgressDialog不显示

    ProgressDialog不显示一般用ProgressDialog来提示用户等待耗时操作,如图中代码块IsVideoQualityWithFace();如果不在单独线程中执行的话,ProgressDialog将不会显示 AlertDialog.Builderbuilder=newAlertDialog.Builder(context); builder.setTitle(“提示”) .setMessage

  • 别在学习框架了,那些让你起飞的计算机基础知识。「建议收藏」

    别在学习框架了,那些让你起飞的计算机基础知识。「建议收藏」我之前里的文章,写的大部分都是与计算机基础知识相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的。框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,可以帮助我们更快着学习一门知识,更加懂得计算机的运行机制。当然,在面试中也经常会被问到,特别是对于应届生,对于春秋招,也可以看看我前阵子写过的文章历经两个月,我的秋招之路结束了!。也有读者经常问的计算…

  • android activity跳转动画_叠化转场是什么意思

    android activity跳转动画_叠化转场是什么意思Android Reveal圆形Activity转场动画

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号