直接上代码:
#include <iostream>
#include <stdio.h>
void bubble_sort(int *a,int len) //冒泡排序
{
int i,j;
int temp = 0;
for(i = 0 ; i < len-1 ; i++)
for(j = 0 ; j < len-1-i ; j++)
{
if(a[j]>a[j+1]) //如果顺序错误,就进行交换
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
printf("冒泡排序:");
for(i = 0;i < len;i++)
printf("%d ",a[i]);
printf("\n");
}
void selection_sort(int *a,int len)//选择排序
{
int i,j;
int temp = 0;
for(i = 0 ; i < len-1 ; i++)
for(j = i+1 ; j < len ; j++)
{
if(a[i]>a[j]) //从数组第一个元素开始与其他元素比较,选出最大或最小的元素放在头部
{ //然后再对其他未排序的元素做判断交换
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
printf("选择排序:");
for(i = 0 ; i < len ; i++)
printf("%d ",a[i]);
printf("\n");
}
void insertion_sort(int *a, int len) //插入排序
//意思差不多就是从数组第二个元素开始,判断它前一个值是否大于或小于当前值
//满足循环条件,就实现交换位置。
{
int i,j,temp;
for (i = 1 ;i < len ;i++)
{
temp = a[i];
for (j = i ;j > 0&&a[j-1] > temp ;j--)
a[j] = a[j-1]; //这边是让当前值为前一个值,因为前面已经排好序了,这个交换在这场循环里面只做一次
a[j] = temp; //然后就做j的自减,完成对前一个值的赋值,这样就完成了交换位置
}
printf("插入排序:");
for(i = 0 ; i < len ; i++)
printf("%d ",a[i]);
printf("\n");
}
void shell_sort(int *a, int len) //希尔排序
{
int d=len;
int i,j;
while(d>1){
d=(d+1)/2;
for(i=0;i<len-d;i++){
if(a[i+d]<a[i]){
int t;
t=a[i+d];
a[i+d]=a[i];
a[i]=t;
}
}
}
printf("希尔排序:");
for(int i = 0 ; i < len ; i++)
printf("%d ",a[i]);
printf("\n");
}
int main()
{
int array[10]={5,7,9,11,4,8,22,21,1,2};
bubble_sort(array,10);
selection_sort(array,10);
insertion_sort(array,10);
shell_sort(array,10);
return 0;
}