学计算机程序设计的应该都知道,算法是程序之魂。所谓算法,就是解决问题的方法加上有限的实现步骤。算法的特点有有穷性,确定性,有效性,有零个或多个输入,有一个或多个输出。下面我们就来简单总结一下C语言中的三种经典排序算法。
一、冒泡算法。
所谓冒泡排序法,就是对一组数字进行从大到小或从小到大排序的一种算法。具体方法是,相邻的数字两两交换。从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不相同,则将两个数的位置进行交换(对调);如果其余我们期望的相同,则不交换位置。重复这样的过程,一直到最后没有数值需要进项交换,则排序完成。
实例:
#include<stdio.h>
int main()
{
//定义一个数组存储输入的数字
int arr[10];
//定义两个个变量控制循环
int i,j;
//定义一个中间变量
int temp;
//提示输入
for(i=0;i<10;i++)
{
printf("请输入第%d个数:\n",i+1);
scanf("%d",&arr[i]);
getchar();
}
//冒泡排序
for(j=0;j<9;j++)
{
for(i=0;i<9;i++)
{
//将数值交换
if(arr[i]>arr[i+1])
{
temp=arr[i+1];
arr[i+1]=arr[i];
arr[i]=temp;
}
}
}
//循环输出结果
for(i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
二、选择排序。
选择排序的基本思路就是,在要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数中再找出最小的数与第二个位置的数交换,如此循环,直到倒数第二个数与最后一个数比较为止。
实例:
#include<stdio.h>
int main()
{
//定义一个数组存储输入的数
int arr[10];
//定义两个变量控制循环
int i,j;
//定义一个中间变量
int temp;
for(i=0;i<10;i++)
{
//提示输入
printf("请输入第%d个数:\n",i+1);
scanf("%d",&arr[i]);
getchar();
}
//选择排序
for(j=0;j<10;j++)
{
for(i=j;i<10;i++)
{
//对调位置
if(arr[j]>=arr[i])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
//循环输出排序结果
for(i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
三、插入排序。
在进行插入排序之前必须保证被插入的那一组数是有序的(以从小到大为例),其基本思路就是,将要插入的数与被插入的数列中的每一个数一次比较,直到这个插入的数大于数列中的前一个数并且小于或等于数列中的后一个数,记下这个位置,然后将此位置后的数一次向后移动,为要插入的数腾出位置,最后将要插入的数放到腾出的位置上完成排序。
实例:
#include<stdio.h>
int main()
{
//定义一个有序的数组
int arr[10]={12,34,67,89,123,145,167,213,223};
//定义一个变量存储输入的数
int num;
//定义两个变量控制循环
int i,j;
//定义一个变量存储索引
int index=9;
//提示输入
printf("请输入一个数:\n");
scanf("%d",&num);
//插入排序
for(i=0;i<9;i++)
{
if(arr[i]<=num && num<arr[i+1])
{
index=i+1;
break;
}
else if(num<=arr[i])
{
index=0;
break;
}
}
//移动位置
for(j=9;j>index;j--)
{
arr[j]=arr[j-1];
}
//将要插入的数放到腾出的位置上
arr[index]=num;
//循环输出排序结果
for(i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
以上就是我对C语言中常用的三种经典算法的总结,希望对各位在学C语言排序算法的小伙伴有帮助。