我们使用到三个指针
head 指向待排序序列的首个元素
maxp指向待排序序列的最大值
curp用来查找待排序序列的最大值,每次排序都从head往后找,所以每次排序前curp=head
此外,还需要一个变量max来与当前查找值比较,以找出最大值
开始排序前的指针
开始排序,curp指针由head指针位置开始,往后扫描,maxp指针停留在10的位置上
然后交换(swap)head指针和maxp指针所指向的值,之后head++
head++后指向数组第二个元素,同样的,curp指针由head指针位置开始,往后扫描,maxp指针停留在 9 的位置上
然后交换(swap)head指针和maxp指针所指向的值,之后head++
由此进行n-1次排序就能对整个数组完成排序
该排序算法属于选择排序,属于稳定的排序算法,时间复杂度为O(n^2)(最好,平均,最差都一样)
#include <stdio.h>
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=t[0];
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;
}