目录
概要:
本文会介绍两种简单常用的数组排序方法,,以及它们的实现方法和代码示例。
一、冒泡排序法(Bubble Sort)
实现方法:
冒泡排序法,顾名思义,相当于将元素上下排列,轻(小)者上浮,重(大)者下沉。是从最上端元素(第一位)开始由相邻数据两两比较达到排序效果。
(1)对每一对相邻的元素进行比较,若第一个比第二个大,则调换这两个元素的位置,依次两两比较直到数据的最后一对。
(2)重复n次(1)中操作,n为数组中元素的个数,由于每轮结束最后一位一定是最大的,故最后一位不用参与比较。
(3)一直到没有数据可比,输出排序后的数据。(或可设置一个变量来记录是否发生数据交换,若无,则已排序完成,可直接输出)
代码示例:
#include<stdio.h>
int main()
{
int n, m, i, j, temp;
int arr[100];//定义一个数组;
printf("请输入元素个数\n");
scanf("%d", &n); //n为元素的个数
printf("请输入数据\n");
for (i = 0; i < n; i++)
{
scanf_s("%d", &arr[i]); //输入数据;
}
m = n; //因为每进行一次第一轮循环,需要排序的数据都要“--”,因此定义变量m=n;
for (i = 0; i < n; i++)
{
int exchange = 0; //记录这一轮会不会有数据的交换;
for (j = 0; j < m-1; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
exchange = 1;
}
}
m--;
if (!exchange) //若没有数据的交换,则数据已经排列完毕,跳出循环;
break;
}
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]); //输出
}
return 0;
}
二、选择排序法(Selection Sort)
实现方法:
设一个数组中有n个元素,选择出n个元素中最小的一个数据放到第一位,再选择余下n-1个数据中最小的放到第二位,以此类推,达到排序效果。
(1)记录排序的位置,用该位置上的数据与其后数据各个比较,得出最小值赋予该位置。
(2)以此类推,找出对应1~n-1位位置的数据
(3)输出排序后的数组。
代码示例:
#include<stdio.h>
int main()
{
int n,i,j,temp,pos; /*temp记录最小值,pos记录最小值位置*/
printf("请输入要排列几个数据\n");
scanf("%d",&n);
int arr[n]; /*定义一个n个元素的数组*/
printf("请输入各个数据\n");
for(i=0;i<n;i++) /*输入各个数据*/
{
scanf("%d",&arr[i]);
}
for(i=0;i<n-1;i++) /*n个数排序,则只需执行n-1次*/
{
temp=arr[i]; /*记录此时的值为最小值*/
pos=i; /*记录该元素的位置*/
for(j=i+1;j<n;j++) /*与后面的元素逐个比较*/
{
if(arr[j]<temp) /*若temp中的数大于下一位,则temp赋值为下一位*/
{
temp=arr[j];
pos=j;
}
}
arr[pos]=arr[i]; /*交换两个元素的值*/
arr[i]=temp;
}
for(i=0;i<n;i++) /*输出排序后的数组*/
{
printf("%d ",arr[i]);
}
return 0;
}
写在最后:
未完待续,小白会随着深入学习加入其他排序方法,感谢支持!