冒泡排序
#include <stdio.h>
void mySwap(int *a , int i , int j) //交换函数
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
void mySort(int *a , int len)
{
int i,j;
for(i = 0 ; i < len-1 ; i++) //循环次数
{
for(j = 0 ; j < len-1-i ; j++) //最大元素沉底
{
if(a[j] > a[j+1])
mySwap(a , j , j+1);
}
}
}
// 递归方式实现
/* void mySort(int *a , int len)
{
if (len == 1)
return;
int j;
for(j = 0 ; j < len-1 ; j++)
{
if(a[j] > a[j+1])
mySwap(a , j , j+1);
}
mySort(a , len-1);
} */
void myPrint(int *a , int len)
{
int i;
for(i = 0 ; i < len ; i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
int main()
{
int a[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int len = sizeof(a)/sizeof(a[0]);
mySort(a , len);
myPrint(a , len);
return 0;
}
双向冒泡排序
#include <stdio.h>
void mySwap(int *a , int i , int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
void mySort(int *a , int len)
{
int left = 0;
int right = len-1;
int i;
while(left < right)
{
for(i = left ; i < right ; i++)
{
if(a[i] > a[i+1])
mySwap(a , i , i+1);
}
right--;
for(i = right ; i > left ; i--)
{
if(a[i] < a[i-1])
mySwap(a ,i , i-1);
}
left++;
}
}
//递归实现
void mySort1(int *a , int left , int right)
{
if(left >= right)
return;
int i;
for(i = left ; i < right ; i++)
{
if(a[i] > a[i+1])
mySwap(a , i , i+1);
}
right--;
for(i = right ; i > left ; i--)
{
if(a[i] < a[i-1])
mySwap(a ,i , i-1);
}
left++;
mySort1(a , left , right);
}
void myPrint(int *a , int len)
{
int i;
for(i = 0 ; i < len ; i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
int main()
{
int a[] = {8, 7, 9, 6, 3, 4, 5, 2, 1, 0};
int len = sizeof(a)/sizeof(a[0]);
mySort(a , len);
//mySort1(a , 0 , len-1);
myPrint(a , len);
return 0;
}