/* 冒泡算法实现的普通思想:
1.数组中相邻的两个元素进行比较,一旦前一个比后一个数据大,则交换。
2.依次类推不断进行,最后呈现出最前的数为最小的,最后的数为最大的 第一层for循环用于指出 本次排序需要进行多少趟排序。 第二层for循环用于指出 本趟排序需要进行多少次排序冒泡算法的优化思想:
1.数组中相邻的两个元素进行比较,一旦前一个比后一个数据大,则交换,且做好修改的标记
2.依次类推不断进行,在第二层for循环结束后检验本趟排序是否进行了数据的交换,如果没有那么我们就可以认为此时的数组排序已经完成,不用再排了。
最后呈现出最前的数为最小的,最后的数为最大的
*/
#include "stdio.h"
#include "stdlib.h"
/*
函数名称:BubbleSortBottoM_To_Top
函数功能:利用冒泡算法实现从底部到顶部的 由小到大排序
输 入:待排序数组 及 数组中元素个数
输 出:排序好的数组
*/
int BubbleSortBottoM_To_Top(int *p,int n)
{
if(p == NULL)
{
printf("Input Err\n");
return -1;
}
int i = 0,j = 0;
for(i =0;i<n-1;i++)
{
for(j = n-1;j > 0;j--)
{
if(p[j] < p[j-1])
{
p[j] = p[j]^p[j-1];
p[j-1] = p[j]^p[j-1];
p[j] = p[j]^p[j-1];
}
}
}
return 0;
}
/*
函数名称:BubbleSortTopToBottom
函数功能:利用冒泡算法实现从顶部部到底部的 由小到大排序
输 入:待排序数组 及 数组中元素个数
输 出:排序好的数组
*/
int BubbleSortTopToBottom(int *p,int n)
{
if(p == NULL)
{
printf("Input Err\n");
return -1;
}
int i = 0,j = 0;
for(i =0;i<n-1;i++)
{
for(j = 0;j < n-1-i;j++)
{
if(p[j]<p[j+1])
{
p[j] = p[j]^p[j+1];
p[j+1] = p[j]^p[j+1];
p[j] = p[j]^p[j+1];
}
}
}
return 0;
}
*
函数名称:BubbleOptimization
函数功能:优化冒泡算法实现从顶部部到底部的 由小到大排序
输 入:待排序数组 及 数组中元素个数
输 出:排序好的数组
*/
int BubbleOptimization(int *p,int n)
{
if(p == NULL)
{
printf("Input Err\n");
return -1;
}
int i = 0,j = 0, sign = 0;
for(i =0;i<n-1;i++)
{ sign = 0;
for(j = 0;j < n-1-i;j++)
{
if(p[j]<p[j+1])
{
p[j] = p[j]^p[j+1];
p[j+1] = p[j]^p[j+1];
p[j] = p[j]^p[j+1];
sign = 1;
}
}
if(sign == 0)
{
break;
}
}
return 0;
}
*
函 数 名:Printf
函数功能:输出数组中的数据
输 入:待输出的数组
输 出:无
*/
void Printf(int *p,int n)
{
if(p == NULL)
{
exit(1);
}
int i = 0;
for(i = 0;i<10;i++)
{
printf("%d\t",p[i]);
}
}
int main()
{
int a[10] = {3,5,2,1,7,8,9,6,11,10};
BubbleSortBottoM_To_Top(a,10);
Printf(a,10);
printf("\n");
BubbleSortTopToBottom(a,10);
Printf(a,10);
printf("\n");
BubbleOptimization(a,10);
Printf(a,10);
printf("\n");
system("pause");
return 0;
}