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;
}        

在这里插入图片描述

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用socks4 socks5 http代理的客户端

    使用socks4 socks5 http代理的客户端///定义的结构structsock4req1{   charVN;   charCD;   unsignedshortPort;   unsignedlongIPAddr;   charother[1];};structsock4ans1{   charVN;   charCD;};structsock5req1{   charVer;   char

    2022年6月26日
    31
  • java resourcebundle_Java – Properties和ResourceBundle类学习「建议收藏」

    java resourcebundle_Java – Properties和ResourceBundle类学习「建议收藏」一、前言在项目的开发过程中,为了统一配置的管理,我们经常需要将一些配置信息根据环境的不同,配置在不同的properties中,然后从里面进行读取。而Properties类作为最基础也是最经常使用的类,通过本文我们来学习一下它的使用,然后再顺便学习下其他几种读取properties文件的方式。二、Properties和ResourceBundle类Properties表示一个持久的属性集,属性列表通…

    2022年7月12日
    13
  • 局域网、城域网、广域网、国际互联网(internet)

    局域网、城域网、广域网、国际互联网(internet)计算机网络按覆盖范围分类可分为局域网,城域网,广域网一、局域网: 1、地理分布范较小,一般为数百米至数公里。可覆盖一幢大楼、一所校园或一个企业、一个家庭。 2、数据传输速率高,一般为100Mbps,目前已出现速率高达1000Mbps的局域网。可交换各类数字和非数字(如语音、图象、视频等)信息。 3、误码率低,这是因为局域网通常采用短距离基带传输,可以使用高质量的传输媒体,从而…

    2022年10月18日
    0
  • jQuery图片轮播特效

    效果预览:http://hovertree.com/texiao/jquery/51/这款特效有缩略图,包含文字说明和链接,可以自动播放,也可以手动切换。使用的jQuery库版本为1.12.3,

    2021年12月22日
    45
  • docker镜像和docker容器的关系_docker基础镜像和项目镜像

    docker镜像和docker容器的关系_docker基础镜像和项目镜像一、docker常用命令#镜像名版本标签镜像id创建时间镜像大小REPOSITORYTAGIMAGEIDCREATEDSIZEhello-worldlatestfce289

    2022年8月16日
    7
  • go语言runtime_中台怎么理解

    go语言runtime_中台怎么理解funcCaller(skipint)(pcuintptr,filestring,lineint,okbool)参数:skip是要提升的堆栈帧数,0-当前函数,1-上一层函数,….返回值:pc是uintptr这个返回的是函数指针file是函数所在文件名目录line所在行号ok是否可…

    2022年10月25日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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