冒泡排序
//冒泡排序
//每一个元素都要与他后面的所有元素进行比较
#include<stdio.h>
int main(void)
{
int buf[10]={8,56,7,4,56,77,432,1,3,4};
for(int i=0;i<9;i++)
{
for(int j=i+1;j<10;j++)
{
if(buf[i]>buf[j])
{
int temp=buf[i];
buf[i]=buf[j];
buf[j]=temp;
}
}
}
for(int k=0;k<10;k++)
{
printf("%d ",buf[k]);
}
return 0;
}
选择排序
//选择排序
//在未排好的元素中,选择最小的放在排列好的元素的最后
#include<stdio.h>
int main(void)
{
int buf[10]={43,65,7,2,454,23,78,4,32,1};
int number=0;
for(int i=0;i<10;i++)
{
number=i;
for(int k=i+1;k<10;k++)//找到最小的哪一个
{
if(buf[number]>buf[k])
number=k;
}
//将选择的数较小的数拿到i小标对应的数
int temp=buf[i];
buf[i]=buf[number];
buf[number]=temp;
}
for(int k=0;k<10;k++)
{
printf("%d ",buf[k]);
}
return 0;
}
插入排序
//插入排序
//一个一个插入,每个插入元素前面的数都是有序数列
#include<stdio.h>
int main(void)
{
int buf[10]={43,34,67,87,65,58,12,43,22,9};
//一个一个元素的去插
for(int i=0;i<10;i++)
{
int j=i;
//将要插入的元素和前面一个一个做比较,因为前面的都是有序数组,比完即插完
while(buf[j]<buf[j-1]&&j>0)
{
int temp=buf[j];
buf[j]=buf[j-1];
buf[j-1]=temp;
j--;
}
}
for(int k=0;k<10;k++)
{
printf("%d ",buf[k]);
}
return 0;
}
希尔排序
//希尔排序
//关键在于一个增量,将数组按照增量分成若干个小组,在每一个小组中进行插入排序
#include<stdio.h>
int main(void)
{
int buf[10]={32,65,34,2,6,85,23,76,21,11};
int zeng=10/2;
for(int zeng=10/2;zeng>0;zeng/=2)
{
//这里的i++有巧妙之处,它让多个分组交替执行插入排序
for(int i=zeng;i<10;i++)
{
int j=i;
//单个分组进行插入排序
while(buf[j]<buf[j-zeng]&&j>=zeng)
{
int temp=buf[j];
buf[j]=buf[j-zeng];
buf[j-zeng]=temp;
j=j-zeng;
}
}
}
for(int k=0;k<10;k++)
{
printf("%d ",buf[k]);
}
return 0;
}