冒泡排序是一种简单的排序算法,它的工作原理如下:
-
比较相邻元素: 从数组的第一个元素开始,依次比较相邻的两个元素。
-
交换元素位置: 如果前面的元素大于后面的元素(升序排序),则交换它们的位置。
-
一轮完成: 一轮比较和可能的交换之后,最大的元素会移动到数组的最后一个位置。
-
重复步骤: 重复以上步骤,每次比较和可能的交换都会把未排序部分的最大元素放到合适的位置。
-
循环结束: 当整个数组都按照顺序排列时,排序完成。
让我们用一个简单的例子来说明冒泡排序过程:
假设我们有数组 [5, 2, 9, 3]
,进行冒泡排序:
- 第一轮比较和可能的交换:
[2, 5, 3, 9]
- 第二轮比较和可能的交换:
[2, 3, 5, 9]
此时,数组已经按照升序排列完成。
冒泡排序的时间复杂度是 O(n^2),其中 n 是数组的长度。虽然它在大数据集上的性能相对较差,但由于其简单性,对于小型数据集来说是一个直观而易于实现的排序算法。
#include<stdio.h>
void sort(int a[],int n)
{
int t;
for(int i=0;i<n;i++){//当i遍历到头的时候 就不会发生j还存在了不用担心j是改写成<n还是<n-1
for(int j=i+1;j<n,j++){
if(a[i]>a[j]){
t=a[j];a[j]=a[i];a[i]=t;//叫比较大的那个定义成中间变量
}
}//neifor
}
void PrintArr(int a[], int n) {
int i;
for (i = 0; i < n; i++) {
if (i < n - 1)
printf("%d ", a[i]);
else if (i == n - 1)
printf("%d", a[i]);
}
}
int main(){
int a[N];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d"m&a[i]);
}//for
sort(a,n);
PrintArr(a,n);
return 0;
}