1.冒泡排序
依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,直至最终完成排序。
冒泡排序是稳定的。算法时间复杂度是O(n ^2)。
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
void bubble_sort(int array[ ], int n)//array为待排序数组,n为数组长度
{
int tmp;
int i=0,j=0;
for(i=0;i<n;i++)
for(j=n-1;j>i;j--)
if(array[j]<array[j-1])
SWAP(array[j],array[j-1]);
}
2.选择排序
假定要设计一个程序,把n个整数排序,其中n>=1。有一种简单的解决办法:
“从未被排序的整数中找出最小整数,将其放在已排序整数列表的下一个位置”
这个简单的方法称之为“选择排序”,选择排序是不稳定的。算法复杂度是O(n ^2 )。
void choice_sort(int array[ ],int n)
{
int i=0,j=0;
int min;
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(array[j]<array[min])
min=j;
}
SWAP(array[i],array[min]);
}
}
3.插入排序
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
直接插入排序是稳定的。算法时间复杂度是O(n ^2)
void insert_sort(int array[ ],n)
{
int i=0,j=0;
int next;
for(i=1;i<n;i++)
{
next=array[i];
for(j=i-1;(j>=0)&&(next<array[j]);j--)
array[j+1]=array[j];
array[j+1]=next;
}
}
4.快速排序
void quick_sort(arrray[ ], int left, int right)
{
int pivot,i,j;
pivot = array[left];
i=left+1;
j=right;
do{
while(array[i]<pivot)
i++;
while(array[j]>pivot)
j--;
if(i<j)
SWAP(array[i],array[j]);
}while(i<j)
SWAP(array[left],array[j]);
quick_sort(array,left,j-1);
quick_sort(array,j+1,right);
}
快速排序的时间复杂度为O(nlog2n);

被折叠的 条评论
为什么被折叠?



