欢迎光临
我们一直在努力

C语言排序——冒泡排序,选择排序

前提:数组倒置

通过循环遍历数组前半部分元素,将第i个元素与倒数第i+1个元素(即len-1-i位置)交换,直至遍历到数组中间位置,实现数组元素的首尾顺序反转。

核心代码:

// 数组倒置核心逻辑(交换首尾对应元素
for(i=0;i<len/2;i++)//循环至数组中间(避免重复交换)
{
int t = a[i];// 临时变量存当前元素
a[i]=a[len-1-i];// 尾部元素赋值给头部
a[len-1-i]=t;// 临时变量赋值给尾部
}

例:生成包含 10 个 0~99 随机整数的数组,先输出原数组,再将数组元素首尾交换实现倒置,最后输出倒置后的数组。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{

int a[10]={0};
srand(time(NULL));// 初始化随机数种子
int len=sizeof(a)/sizeof(a[10]);//计算数组长度 → 总字节数/单个元素字节数

// 给数组赋值10个0~99的随机数
for(i=0;i<len;i++)
{
a[i]=rand()%100;
}

// 输出倒置前的数组
printf("倒置前:\\n")
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("\\n");

// 数组倒置核心逻辑(交换首尾对应元素
for(i=0;i<len/2;i++)//循环至数组中间(避免重复交换)
{
int t = a[i];// 临时变量存当前元素
a[i]=a[len-1-i];// 尾部元素赋值给头部
a[len-1-i]=t;// 临时变量赋值给尾部
}

// 输出倒置后的数组
printf("倒置后:\\n");
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("\\n");
return 0;
}

冒泡排序

(相邻两两比,大后挪)

排序:把一个数组按照特性规则默认从小到大进行排列位置的操作,排序。

  • 升序,从小到大
  • 降序,从大到小()
  • 目的,查找。

冒泡排序规则:

  • 每一次都会找到一个最大值,把最大值,存储到最后面对应位置。(外层循环)
  • 重复遍历数组,依次比较,相邻元素(i和i+1)。(内层循环)

核心代码:

// 外层循环:控制排序轮数,j从数组末尾往头部走(每轮确定1个最大值位置)
for(j=len-1;j>0;j–)
{
// 内层循环:遍历未排序部分,i从0到j-1
for(i=0;i<j;i++)
{
if(a[i]>a[i+1])// 判断相邻元素是否逆序(前>后)
{
// 交换a[i]和a[i+1],把较大值往后移
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}

例:生成包含 10 个 0~99 随机整数的数组,先输出排序前的数组,再通过冒泡排序(从后往前控制轮数,相邻元素比较交换)将数组按升序排列,最后输出排序后的数组

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
//初始化:定义数组+生成随机数
int a[10]={0};
srand(time(NULL));
int len=sizeof(a)/sizeof(a[0]);
int i=0;
for(i=0;i<len;i++)
{
a[i]=rand()%100;
}
// 输出:打印排序前的数组
printf("排序前:\\n");

for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("\\n");
//冒泡排序(升序)
int j=0;
for(j=len-1;j>0;j–)// 外层循环:控制排序轮数(从末尾递减)
{
for(i=0;i<j;i++)// 内层循环:遍历未排序部分,比较相邻元素
{
if(a[i]>a[i+1])
{
int t=0;
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
//输出:打印排序后的数组
printf("排序后:\\n");
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("\\n");
return 0;
}

选择排序

(找最小,一次性换位)

  • 每一次都会找到一个最小值,把最小值,存储到最前面的对应位置。(外层循环)
  • 依次比较元素,(内层循环)

核心代码:

for(i=0;i<len-1;i++)//找到最小值,放到最前面
{
for(j=i+1;j<len,j++)
{
if(a[i]>a[j]
{
int t=a[i];
a[i]=a[j];
a[j]=a[i];
}
}
}

赞(0)
未经允许不得转载:171主机测评 » C语言排序——冒泡排序,选择排序
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址