排序算法

一 冒泡排序
通过左边与右边比较进行交换而实现排序

#include <stdio.h>
int main()
{
	int a[100],i,j,t,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-1;j++)
		{
			if(a[j]<a[j+1])
			{
			t=a[j];
			a[j]=a[j+1];
			a[j+1]=t;
			}
		}
	}
	for(i=0;i<n;i++)
	{
	printf("%d ",a[i]);
	}
	return 0;
}

二 快速排序

#include <stdio.h>
#include <stdlib.h>
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用;
void quicksort(int left ,int right)
{
    int i,j,t,temp;
    if(left>right)
    {
        return;
    }
    temp=a[left];
    i=left;
    j=right;
    while(i!=j)
    {
        //顺序很重要,要先从右往左找,找到小于基准数的数
        while(a[j]>=temp&&i<j)
            j--;
        //在从左往右找,找到大于基准数的数
        while(a[i]<=temp&&i<j)
            i++;
            if(i<j)
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
    }
    //最终将基准数归位
    a[left]=a[i];
    a[i]=temp;
    quicksort(left,i-1);
    quicksort(i+1,right);
    return;
}
int main()
{
    int i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    quicksort(1,n);
    for(i=1;i<=n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

下面介绍函数库里的排序

一、C中的qsort
代码如下

int compInc(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
qsort(a, len, sizeof(a[0]), compInc);

注意 :头文件#include <stdlib.h>
此时a[0]=最小。
当return *(int *)b - *(int *)a;
a[0]=最大。
二、C++中的sort

sort(a,a+n);

头文件为

#include<algorithm>

a为数组名。n为长度。
这样默认是从小到大。
如果想要从大到小
添加

int cmp(int a,int b)
{
	return a>b;
}

但排序许多时候要排序结构体,保持一项排序,其他的元素跟随不变。
下次在写。

posted on 2018-11-30 19:56  湫叶  阅读(83)  评论(0编辑  收藏  举报

导航