1、快速排序
快速排序步骤:
(1)设置两个变量i和j,i = left,j = right
注意:(只能是i=left,而不能写成i=left+1。如果写成i=left+1,则当出现两个数比较的时候,比如-5,0,此时left=0,i=1,这时0和-5就会交换顺序,而实际中是不需要交换顺序的)
(2)以第一个数组元素作为关键数据,赋值给key,即key = a[left];
(3)从j开始由后向前搜索,若a[j]>=key&&j>i,则--j。找到第一个比key小的数a[j];
(4)从i开始由前向后搜索,若a[i]<=key&&i<j,则++i。找到第一个比key大的数a[i];
(5)如果i<j,则交换a[i]和a[j]的数值;
(6)重复(3)(4)(5)步骤,直到i=j;
(7)交换a[left]和a[i]的值
(8)分别从left到j-1和从j+1到right递归sort进行计算,从而得到结果
代码如下:
void swap( int *a, int *b )
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void quick_sort( int *a, int left, int right )
{
int i, j, key;
key = a[left];
i = left;
j = right;
if( left >= right )
return;
while( i != j )
{
while( a[j] >= key && i < j )
--j;
while( a[i] <= key && i < j )
++i;
if( i < j )
swap( &a[i], &a[j] );
}
swap( &a[left], &a[i] );
quick_sort( a, left, i-1 );
quick_sort( a, i+1, right );
}
2、冒泡排序
void bubble_sort( int *p, int n )
{
int i, j, temp;
for( i = 0; i < n - 1; i++ )
{
for( j = i + 1; j < n; j++ )
if(p[j] < p[i])
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
3、选择排序
void select_sort( int *p, int n )
{
int i, j, k, temp;
for( i = 0; i < n - 1; i++ )
{
k = i;
for( j = i + 1; j < n; j++ )
if( p[k] > p[j] )
k = j;
temp = p[i];
p[i] = p[k];
p[k] = temp;
}
}