#include<stdio.h>
#define SWAP(x,y) {int t;t=x;x=y;y=t;}
//选择排序法:
/*
将要排序的对象最为两部分,一部分是已排序的,一部分是未排序的;
每次从未排序的部分中找出最小值,放入已排序的后面
*/
int
*SelectionSort(
int
*p,
int
num)
{
int
i,j,index_min,temp;
for
(i=0;i<num-1;i++)
{
index_min = i;
for
(j=i+1;j<num;j++)
//未排序部分中寻找最小值
{
if
(*(p+j)<*(p+index_min))
{
index_min=j;
}
}
if
(index_min!=i)
{
SWAP(*(p+i),*(p+index_min));
}
}
return
p;
}
//插入排序法:
/*将对象分为两堆,每次取后面一堆中最靠前的元素插入到前面的合适位置*/
int
*InsertionSort(
int
*p,
int
num)
{
int
i,j,k,temp=0;
for
(i=1;i<num;i++)
{
temp = *(p+i);
//依次取后面最靠前的数据
j = i-1;
while
(temp<*(p+j))
//注意体会次循环的巧妙
{
*(p+j+1) = *(p+j);
j--;
if
(-1 == j)
break
;
}
*(p+j+1) = temp;
}
return
p;
}
//冒泡排序法:
/*一次循环比较相邻元素*/
int
*BubbleSort(
int
*p,
int
num)
{
int
i,j,temp;
temp = p[0];
for
(i=0;i<num-1;i++)
{
for
(j=0;j<num;j++)
{
if
(p[j]<p[j+1])
{
SWAP(p[j+1],p[j]);
}
}
}
return
p;
}
int
main()
{
int
i,num[10]={3,45,67,1,2,0,35,70,21,10},*ptr;
int
length =10;
// ptr = SelectionSort(num,length);
// ptr = InsertionSort(num,length);
ptr = BubbleSort(num,length);
for
(i=0;i<length;i++)
{
printf
(
"%d "
,*(ptr+i));
}
return
0;
}
|