提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
提示:以下是本篇文章正文内容,下面案例可供参考
一、冒泡排序是什么?
核心思想:两两相比较,大的值去右边 | 左边。
1.知道趟数,N个元素得进行N-1趟排序
如:10个元素得进行9趟冒泡排序,9趟完后第10个元素自然在最小位(升序) | 最大位(降序)。
2.知道每趟时:1个元素得进行几次比较。
如:10个元素进行冒泡排序
第一趟 剩:10个元素 —9次比较
第二趟 剩:9个元素 —8次比较
…
第九趟 剩:2个元素 —1次比较
结论:趟数:N - 1
每趟元素比较次数:N-1-i
3.进行交换
核心:得创建1个为0(NULL)的临时变量,用来帮助两个数位置交换。
int cup = 0;
升序:大的去右边
if(left > right)
{
cup = left;
left = right;
right = cup;
}
降序:大的去左边
if(lift < right)
{
cup = lift;
lift = right;
right = cup;
}
二、使用步骤
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void bubble_sort2(int arr[], int sz)
{
int i = 0;
//冒泡排序的趟数
for (i = 0; i < sz - 1; i++)
{
//一趟冒泡排序
int j = 0;
int cup = 0;
for (j = 0; j < sz - 1 - i; j++)
{
//升序
if (arr[j] > arr[j + 1])
{
cup = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = cup;
}
}
}
}
void bubble_sort1(int arr[], int sz)
{
int i = 0;
//冒泡排序的趟数
for ( i = 0; i < sz - 1; i++)
{
//一趟冒泡排序
int j = 0;
int cup = 0;
for (j = 0; j < sz - 1 - i; j++)
{
//降序
if (arr[j] < arr[j+1])
{
cup = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = cup;
}
}
}
}
int main()
{
int arr[10] = { 0,1,2,4,7,9,5,8,6,3 };
int sz = sizeof(arr) / sizeof(arr[0]);
//0 1 2 3 4 5 6 7 8 9
//要对数组升序排序
//冒泡排序
int i = 0;
//排序前
printf("排序前:");
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
//升序排序
bubble_sort2(arr, sz);
printf("\n升序排序后:");
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
//降序排序
bubble_sort1(arr, sz);
printf("\n降序排序后:");
for ( i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
完成: