排序(冒泡排序算法)
本专题将总结数据结构中几种常见的基本排序方法(后续的几种排序方法将会在整理后发布),意图将计算机遇到的整形数据从小到大排序(处理数据规模很大通常以万起步,并且要求计算机有一定的工作效率,此时就需要算法来优化程序),具体说明如下:
前提声明:这部分主要讨论的是算法,所以不会涉及程序的全部,主要通过函数方法来展示算法过程。这部分的讨论都是基于函数头 void X_Sort(ElementType A[],int N}
来实现因为数据通常是存放在数组中,所以传入函数的有数组A[],以及数组内存储的元素的个数N,通过程序的运行,且排序前后的相对位置不会发生改变,使得最终排好序的数组返回主函数中。之所以有这么多的算法是因为每个算法都有各自的好处和适用的场景,没有绝对的好与坏。
一、冒泡排序
该排序是较为基础的排序,排序的时候将所有数据竖着写,当改变其中一个数据的时候就像泡泡一样上下浮动,故称这种方法为冒泡排序。排序的原理是通过一趟趟的遍历,使得每次遍历的时候两个相邻之间的数据相比,如果前一个数据比后一个数据的大的时候,则两个数的位置相交换,如果两个数字一样则不发生交换,一趟遍历完成之后,会使遍最大的那个数排在最后面。
代码实现聚体如下:
Void Bubble_Sort(ElementType A[],n)
{
for(p=n-1;p>=0;p--){//一趟外循环
flag=0;//标志符号
for(i=0;i<p;i++){//内部两两交换循环
if(A[i]>A[i+1]){
swap(A[i],A[i+1]);//调用函数
flag = 1;//核心
}
}
if(flag == 0)break;
//如果在一趟循环中没有交换任意一对数据,则说明全部排好,直接退出循环
}
}
void swap(int *a,int *b){//传入两个整形指针
int temp;
temp= *a;
*a=*b;
*b=temp;
//因为函数里面在C语言里面只能传值给函数,所以只能用地址来返回多个值。
}