第三篇【数组排序-三指针操作】

有数组int t[10]={ 1,2,3,4,5,10,9,8,7,6 };
对数组进行排序

我们使用到三个指针
head 指向待排序序列的首个元素
maxp指向待排序序列的最大值
curp用来查找待排序序列的最大值,每次排序都从head往后找,所以每次排序前curp=head
此外,还需要一个变量max来与当前查找值比较,以找出最大值

开始排序前的指针第三篇【数组排序-三指针操作】_第1张图片
开始排序,curp指针由head指针位置开始,往后扫描,maxp指针停留在10的位置上
然后交换(swap)head指针和maxp指针所指向的值,之后head++第三篇【数组排序-三指针操作】_第2张图片
head++后指向数组第二个元素,同样的,curp指针由head指针位置开始,往后扫描,maxp指针停留在 9 的位置上
然后交换(swap)head指针和maxp指针所指向的值,之后head++

第三篇【数组排序-三指针操作】_第3张图片
由此进行n-1次排序就能对整个数组完成排序
该排序算法属于选择排序,属于稳定的排序算法,时间复杂度为O(n^2)(最好,平均,最差都一样)
第三篇【数组排序-三指针操作】_第4张图片

#include 
void prin(int t[],int n)
{
	for(int j=0; j<n; j++)
		printf("%d ",t[j]);
	printf("\n");
}
void sort(int t[],int n)
{
	int maxp=0;
	int max;
	int head=0;
	int curp;
	int tem;
	while(head<n-1)
	{
		curp=head;
		max=t[head];
		while(curp<n)
		{
			if(t[curp]>=max)
			{
				max=t[curp];
				maxp=curp;
			}
			curp++;
		}
		tem=t[head];
		t[head]=t[maxp];
		t[maxp]=tem;
		head++;
		printf("第%d次排序后(交换%d和%d):",head,t[maxp],t[head-1]);
		prin(t,n);
	}
}
int main()
{
	int n=10;
	int t[10]= {1,2,3,4,5,10,9,8,7,6};
	printf("原数组为:") ;
	prin(t,n);
	sort(t,n);
	printf("数组排序后为:") ;
	prin(t,n);
	return 0;
}

你可能感兴趣的:(算法1,排序算法,算法,c语言)