三种排序方法:冒泡排序,选择排序,sort()函数排序

三种排序方法:冒泡排序,选择排序,sort函数排序。
引言:为什么要写呢?因为我怕我忘了,一个寒假过去冒泡排序都不会手写了。
其中的冒泡排序和选择排序为C语言实现,而sort函数排序则借助C++实现,并且还可以用sort函数对结构体进行排序。

  1. 冒泡排序
    原理:三种排序方法:冒泡排序,选择排序,sort()函数排序_第1张图片
    思路: 设置两个双重循环,第一重循环表示每一次的冒泡次数,即第一个最大值冒泡需要n次比较,第二个最大值需要n-1次比较,以此类推,第二重循环表示相互比较的过程,并根据大小进行交换,当结束循环后,则该数组按照从大到小或者从小到大依次排好,但是由于设置了双重循环,时间复杂度为N*N。
    代码:
#include 
void bouble(int a[],int n)
{
    int i,j,tmp;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(a[j+1]>a[j])
            {
                tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    }
}
int main()
{
    int i,j,a[20];
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    bouble(a,10);
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    return 0;
}
/*45 39 22 8 35 14 7 40 32 19*/
/*39 45 22 8 35 14 7 40 32 19*/
  1. 选择排序:
    原理: 1.从第一个元素出发到最后一个元素,找到其中的最大值或者最小值,然后将它和第一个元素交换,再从第二个元素出发到最后一个,找到其中的最大值或者最小值,然后将它和第二个元素交换,以此类推,当进行完一次遍历的时候,排序就会完成。
    **思路:**首先设置一个for循环代表交换次数也充当被交换的节点,再设置一个循环用于遍历查找最大值或者最小值,内层循环没结束一次,就进行一次交换,当两层循环结束,就完成了排序过程。选择排序的时间复杂度为N*N。
    代码:
#include 
void choose(int a[],int n)
{
    int i,j,tmp;
    int ad=0,maxx=a[ad];//ad用于存放最大值的下标,maxx用于找到存放最大值。
    for(i=0;i<n-1;i++)
    {
        ad=i;maxx=a[ad];
        for(j=i+1;j<n;j++)
        {
            if(a[j]>maxx)
            {
                maxx=a[j];
                ad=j;
            }
        }
        tmp=a[i];
        a[i]=a[ad];
        a[ad]=tmp;
        ad=0;maxx=-1;
    }
}
int main()
{
    int i,j,a[20];
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    choose(a,10);
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    return 0;
}
/*45 39 22 8 35 14 7 40 32 19*/
/*39 45 22 8 35 14 7 40 32 19*/
  1. *sort函数排序:
    介绍:sort()是一个C++库中自带的排序函数,其根源是cmp()函数,使用sort()函数排序时,时间复杂度为:n*log2(n)。
    数组用法: 一共有两种一种是从小到大排序,一种是从大到小排序,默认是从小到大排序。
    sort(a,a+n)//默认从小到大
    sort(a,a+n,less<进行排序的数据类型>());//从小到大
    sort(a,a+n,greater<进行排序的数据类型>());//从大到小

结构体的用法: 需要自己写一个bool类型的cmp函数,在函数内部定义需要如何对结构体进行排序。
步骤: 首先,我们定义一个结构体,然后写一个bool型cmp的排序函数,再在主函数中用sort(vis,vis+n,cmp)即可。
代码:

struct node
{
    int x;
    int y;
}vis[10];
bool cmp(node s1,node s2)
{
    return s1.x>s2.x;//根据x的大小从小到大进行排序
}
int main()
{
	sort(vis,vis+n,cmp);
	return 0;
}

你可能感兴趣的:(ACM算法,C语言,排序算法,算法,c++,c#)