#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;
}


点赞(6)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论