第一:冒泡
#include<stdio.h>
//冒泡排序
void swap (int *a, int *b) //交换
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void print_array(int *v ,int len) //打印
{
int i;
for( i = 0; i < len ; i++)
{
printf("%d ",v[i]);
}
printf("\n");
}
void bubble_sort(int *v , int len)
{
int i;
int j;
int times = 0;
for (i = 0; i < len-1; i++)
{
for(j = 0; j < len -1 -i; j++)
{
if(v[j] > v [j+1])
{
swap(v+j, v+j+1); //swap(&v[j],&v[j+1])
}
times ++;
}
print_array(v, len);
}
printf("%d\n",times);
}
int main()
{
int a[] = {5,4,3,2,1};
int len = sizeof(a)/sizeof(a[0]);
print_array(a,len);
bubble_sort(a,len);
printf("**");
print_array(a,len);
return 0;
}
第二:选择
#include<stdio.h>
//冒泡排序
void swap (int *a, int *b) //交换
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void print_array(int *v ,int len) //打印
{
int i;
for( i = 0; i < len ; i++)
{
printf("%d ",v[i]);
}
printf("\n");
}
void bubble_sort(int *v , int len)
{
int i;
int j;
int times = 0;
for (i = 0; i < len-1; i++)
{
for(j = 0; j < len -1 -i; j++)
{
if(v[j] > v [j+1])
{
swap(v+j, v+j+1); //swap(&v[j],&v[j+1])
}
times ++;
}
print_array(v, len);
}
printf("%d\n",times);
}
void select_sort(int *v,int len) //选择排序
{
int max_value; //最大值
int max_pos; //位置
int i,j;
for(i = 0; i < len-1; i++) //外层循环
{
max_value = v[0];
max_pos = 0;
for(j = 0; j < len - i; j++)
{
if(v[j] > max_value)
{
max_value = v[j];
max_pos = j;
}
}
swap(v + max_pos, v + len - i - 1);
print_array(v,len);
}
}
int main()
{
int a[] = {52,44,3,23,15,32};
int len = sizeof(a)/sizeof(a[0]);
print_array(a,len);
select_sort(a,len);
print_array(a,len);
return 0;
}
第三 :插入排序
#include<stdio.h>
//冒泡排序
void swap (int *a, int *b) //交换
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void print_array(int *v ,int len) //打印
{
int i;
for( i = 0; i < len ; i++)
{
printf("%d ",v[i]);
}
printf("\n");
}
void bubble_sort(int *v , int len) //冒泡排序
{
int i;
int j;
int times = 0;
for (i = 0; i < len-1; i++)
{
for(j = 0; j < len -1 -i; j++)
{
if(v[j] > v [j+1])
{
swap(v+j, v+j+1); //swap(&v[j],&v[j+1])
}
times ++;
}
print_array(v, len);
}
printf("%d\n",times);
}
void select_sort(int *v,int len) //选择排序
{
int max_value; //最大值
int max_pos; //位置
int i,j;
for(i = 0; i < len-1; i++) //外层循环
{
max_value = v[0];
max_pos = 0;
for(j = 0; j < len - i; j++)
{
if(v[j] > max_value)
{
max_value = v[j];
max_pos = j;
}
}
swap(v + max_pos, v + len - i - 1);
print_array(v,len);
}
}
void insert_sort(int *v, int len) // 插入排序
{
int i,j;
int value;
for(i = 1 ; i < len ; i ++)
{
value = v[i];
for(j = i ; j > 0 && value < v[j-1] ; j--)
{
v[j] = v[j -1];
}
v[j] = value;
print_array(v, len);
}
}
void insert_sort2(int *v, int len) // 插入排序
{
int i,j;
int value;
for(i = 1 ; i < len ; i ++)
{
value = v[i];
for(j = i ; j > 0 ; j--)
{
if(value > v[j - 1])
{
break;
}
v[j] = v[j -1];
}
v[j] = value;
print_array(v, len);
}
}
int main()
{
int a[] = {52,44,3,23,1,15,32};
int len = sizeof(a)/sizeof(a[0]);
print_array(a,len);
insert_sort2(a,len);
print_array(a,len);
return 0;
}