C语言实现选择排序、直接插入排序、冒泡排序的示例
选择排序
选择排序是一种简单直观的排序算法,其核心思想是:遍历数组,从未排序的序列中找到最小元素,将其放到已排序序列的末尾。
时间复杂度:O(n^2)
稳定性:不稳定
/*
*@briefselectionsort
*/
void
selection_sort(inta[],intn)
{
inti,j,min,tmp;
for(i=0;i<n-1;++i){
min=i;
for(j=i+1;j<n;++j){
if(a[j]<a[min]){
min=j;
}
}
if(min!=i){
tmp=a[min];
a[min]=a[i];
a[i]=tmp;
}
}
}
直接插入排序
直接插入排序是一种比较容易理解的排序算法,其核心思想是遍历数组,将数组中的元素逐个插入到已排序序列中。
时间复杂度:O(n^2)
稳定性:稳定
实现:
/*@briefinsetionsort
*insertthenewelementtothesortedsubarray
*/
void
insertion_sort(inta[],intn)
{
inti,j,num;
for(i=1;i<n;++i){
num=a[i];
for(j=i-1;j>=0&&a[j]>num;--j)
a[j+1]=a[j];
a[j+1]=num;
}
}
冒泡排序
冒泡排序是最基本的排序算法之一,其核心思想是从后向前遍历数组,比较a[i]和a[i-1],如果a[i]比a[i-1]小,则将两者交换。这样一次遍历之后,最小的元素位于数组最前,再对除最小元素外的子数组进行遍历。进行n次(n数组元素个数)遍历后即排好序。外层循环为n次,内层循环分别为n-1,n-2…1次。
时间复杂度:O(n^2)
稳定性:稳定
实现:
/*@briefbubblesort
*movethesmallestelementtothefrontineverysingleloop
*/
void
bubble_sort(inta[],intn)
{
inti,j,tmp;
for(i=0;i<n;++i){
for(j=n-1;j>i;--j){
if(a[j]<a[j-1]){
tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
}
}
}