您的位置:首页 > 其它

各种排序

2016-04-30 15:59 369 查看
一.冒泡排序

冒泡排序的思想是:每次比较两个相邻的元素,如果如果顺序错误就把他们交换过来

//冒泡排序的基本思想是:每次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来

#include<stdio.h>

int main()

{

int a[100],i,j,t,n;

scanf("%d",&n);

for(i=1;i<=n;i++)

scanf("%d",&a[i]);

//冒泡排序的核心部分

for(i=1;i<=n-1;i++)//n个数排序,只用进行n-1趟

{

for(j=1;j<=n-i;j++)//从第1位开始比较知道最护一个

{

if(a[j]<a[j+1])//比较大小并交换

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

}

for(i=1;i<=n;i++)

printf("%d ",a[i]);

return 0;

}

二.直接插入排序

void insertsort()

{

int a[],n;

int i,j,temp;

for(i=1;i<num;i++)

{

temp=a[i];

j=i-1;

while(temp<a[j]&&j>=0)

{

a[i+1]=a[i];

j--;

}

a[j+1]=temp;

}

}

三.选择排序

是在序列中寻找一个最小的和第一排序,随着排好的越来越多第一个也就渐渐的往后移位

void selectsort()

{

int a[],int n;

int i,j,k,temp;

for(i=0;i<n;i++)

{

k=i;

for(j=i+1;j<n;j++)

{

if(a[k]>a[j])

{

k=j;

}

}

if(k!=i)

{

temp=a[i];

a[i]=a[k];

a[k]=temp;

}

}

}

四.快速排序

快速排序是基于二分思想

void quicksort(int left,int right)

{

int i,j,t,temp;

if(left>right)

return ;

temp=a[left];//temp中存的就是基准数

i=left;

j=right;

while(i!=j)

{

//顺序很重要,要先从右往左找

while(a[j]>=temp&&i<j)

j--;

//再从左往右找

while(a[i]<=temp&&i<j)

i++;

//交换两个数在数组的位置

if(i<j)//当哨兵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);//继续处理右边的

}

五.堆排序

#include<stdio.h>

int main()

{

int book[1001],i,j,t,n;

for(i=0;i<=1000;i++)

book[i]=0;

scanf("%d",&n); //输入一个数,接下来有n个数

for(i=1;i<=n;i++)

{

scanf("%d",&t);//把每一个数读到变量t中

book[t]++;//进行计数,对编号为t的桶中放一个小旗子

}

for(i=0;i<=1000;i++)//此处是由小到大排序,还可以由大到小 for(i=1000;i>=0;i--)

//依次判断编号为 1000~0的桶

for(j=1;j<=book[i];j++)//出现了几次就将桶的编号打印几次

{

printf("%d ",i);

}

getchar();getchar();//这里的 getchar()用来暂停程序,以便查看程序输出的内容

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: