**
冒泡排序与选择排序
**
排序方法是一种基本的、重要的的算法。
本文将具体介绍
1.冒泡排序和选择排序
2.选择排序的优化算法;
首先冒泡排序的逻辑是:每次将相邻两个数比较,将小的调到前面。
可参考具体的流程图
再上冒泡排序的代码图
#include<stdio.h>
int main()
{
int i, j,temp;
int a[10];
printf("请输入一个乱序数组:\n");
for (i = 0; i < 10; i++)
{
scanf_s("%d",&a[i]);//输入一个乱序数组
}
for (i = 0; i < 9; i++)//大循环的趟数为n-1
{
for (j = 0; j < 9-i; j++)//每一趟比较的次数
{
if (a[j] > a[j + 1])//大数沉底,小数浮起
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (i = 0; i < 10; i++)//输出数组
printf("%3d",a[i]);
}
下面是冒泡排序的优化
如果数组在几次循环后就排好序了,我们不用等所有循环结束在跳出循环,这时只需加一个标识就可提前结束,加快效率。
#include<stdio.h>
int main()
{
int i, j, temp;
int a[10];
int flag;
printf("请输入一个乱序数组:\n");
for (i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);//输入一个乱序数组
}
for (i = 0; i < 9; i++)//大循环的趟数为n-1
{
flag = 1;//重置标识
for (j = 0; j < 9 - i; j++)//每一趟比较的次数
{
if (a[j] > a[j + 1])//大数沉底,小数浮起
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = 0;
}
}
if (flag) break; //如果没进行排序,直接跳出
}
for (i = 0; i < 10; i++)//输出数组
printf("%3d", a[i]);
}
选择排序的基本思想:
每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。
康康流程图
下面是具体的代码图
#include<stdio.h>
int main()
{
int i, j;//声明变量
int a[10];
int min,temp;
printf("请输入数字:\n");
for (i = 0; i < 10; i++)//输入数组
{
scanf_s("%d", &a[i]);
}
for (i = 0; i < 9; i++)
{
min = i;
for (j = i+1; j < 10; j++)
{
if (a[min] > a[j])//找出数组中最小元素的下标
{
min = j;
}
}
temp = a[i];//让数组元素依次变成最小元素
a[i] = a[min];
a[min] = temp;
}
for (i = 0; i < 10; i++)//输出数组
{
printf("%3d", a[i]);
}
return 0;
}
两者既有区别又有联系。
谢谢大家的观看!