因为作者正在持续学习,所以该博客将会持续更新
- 桶序法
- 冒泡法
- 简单排序法
- 直接插入法
- 希尔排序法
桶序法
#include <stdio.h>
#define N 11
int main(void)
{
int a[11]={1,4,3,6,1,8,9,10,22,33,12};
int b[101]={0};//数组b全部初始化为0
for (int i=0;i<N;i++){
b[a[i]]++;
}
for (int j=0;j<101;j++){
while(b[j]!=0){
printf("%d\t",j);
--b[j];
}
}
getchar();
}
冒泡法
#include <stdio.h>
#define N 11
int main(void)
{
int i,j;
int a[11]={0,4,3,6,1,8,9,10,22,33,12};
//第一个作为一个交换介质
for (i=1;i<N;i++){
for (j=i;j<N;j++){
if (a[i]>a[j])
a[i]=a[i]+a[j]-(a[j]=a[i]);
}
}
for (int i=1;i<N;i++){
printf("%d\t",a[i]);
}
getchar();
}
简单排序
#include <stdio.h>
#define N 11
int main(void)
{
int i,j;
int temp;
int a[11]={0,4,3,6,1,8,9,10,22,33,12};
//第一个作为一个交换介质
for (i=1;i<N;i++){
a[0]=a[i];
for (j=i+1;j<N;j++){
if (a[0]<a[j]){
a[0] = a[j];
temp = j;
}
}
if(a[i] != a[0] )
a[i] = a[temp] + a[i]-(a[temp] = a[i]);
}
for (int i=1;i<N;i++)
printf("%d\t",a[i]);
getchar();
}
直接插入排序法
#include <stdio.h>
#define N 11
int main(void)
{
int i,j;
int a[11]={0,4,3,6,1,8,9,10,22,33,12};
for (i=2;i<N;i++){
if( a[i] > a[i-1])
{
a[0] = a[i];
for (j = i-1;a[j]<a[0];j--)
a[j+1] = a[j];//后移
a[j+1] = a[0];
}
}
for (int i=1;i<N;i++)
printf("%d\t",a[i]);
getchar();
}
希尔排序法
#include <stdio.h>
#define N 11
int main(void)
{
int i,j;
int d,x;
int a[11]={0,4,3,6,1,8,9,10,22,33,12};
d = N/2; //计算第一次的增量
while(d>=1){
for ( i = d; i < N; i++){
x = a[i]; //获取序列中的写一个数据
j = i-d; //序列中前一个数据的序号
while(j>0 && a[j]>x){ //下一个数大于前一个数
a[j+d] = a[j]; //将后一个数向前移动
j -= d; //修改序号,继续向前比较
}
a[j+d] = x; //保存数据
}
d /= 2; //缩小增量
}
for ( i =0; i<N; i++)
printf("%d\t",a[i]);
getchar();
}
希尔排序(自己理解之后写的)
#include <stdio.h>
#define N 11
int main(void)
{
int i,j;
int d,x;
int a[N]={11,33,29,6,1,8,9,10,22,3,12};
d = N/2;
while(d>=1){
for (i = 0; i<= d;i++){
for (x = 0;x<N-d;x++)
if(a[x]>a[x+d])
a[x] = a[x]+a[x+d]-(a[x+d]=a[x]);
}
d /=2;
}
for ( i =0; i<N; i++)
printf("%d\t",a[i]);
getchar();
}