c语言实现选择排序

选择排序的思想是将待排序的数组进行循环,从data[1]开始,分别用data[2]到data[n-1]进行比较,如果比data[1]小,则记录下data[j]在数组中的位置,将j复制到index中,在继续让data[2]到data[n-1]与data[index]进行比较,如果存在比data[index]小的那么继续将其复制到data[index]中,這样一遍循环下来便可找到data[1]到data[n-1]中最小的数字,接下来将data[1]最小的数data[index]进行交换,用data[0]做为哨兵,這样循环一遍便可以找到最小的元素,以此类推,循环n-1遍便可以完成整个排序过程。需要注意的是 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。


#include<stdio.h>

typedef struct{
	int key;
	char name[10];
}Data;

Data listOld[]={{0,"num0"},{49,"num1"},{37,"num2"},{56,"num3"},{67,"num4"},{43,"num5"},{97,"num6"},{23,"num7"},{49,"num8"}};

void printfData(Data *pdata,int n);
void selectSort(Data *pdata,int n);

int main(int argc,char argv[]){
	selectSort(listOld,9);
	printfData(listOld,9);
	return 0;
}


void printfData(Data *pdata,int n)
{
    int i;
	for(i=1;i<n;i++)
	{
			printf("%d,%s ",pdata[i].key,pdata[i].name);
	}
	printf("\n");

}

void selectSort(Data *pdata,int n){
	int index,i,j;
	for(i=1;i<n;i++){
		index = i;
		pdata[0] = pdata[i];
		for(j=i+1;j<n;j++){
			if(pdata[j].key<pdata[index].key)
			{
				index = j;
			}
		}
		if(index!=i){
					pdata[0]=pdata[i];
					pdata[i]=pdata[index];
					pdata[index]=pdata[0];

		}
	}
}

#include<stdio.h>

typedef struct{
	int key;
	char name[10];
}Data;

Data listOld[]={{0,"num0"},{49,"num1"},{37,"num2"},{56,"num3"},{67,"num4"},{43,"num5"},{97,"num6"},{23,"num7"},{49,"num8"}};

void printfData(Data *pdata,int n);
void selectSort(Data *pdata,int n);

int main(int argc,char argv[]){
	selectSort(listOld,9);
	printfData(listOld,9);
	return 0;
}


void printfData(Data *pdata,int n)
{
    int i;
	for(i=1;i<n;i++)
	{
			printf("%d,%s ",pdata[i].key,pdata[i].name);
	}
	printf("\n");

}

void selectSort(Data *pdata,int n){
	int index,i,j;
	for(i=1;i<n;i++){
		index = i;
		pdata[0] = pdata[i];
		for(j=i+1;j<n;j++){
			if(pdata[j].key<pdata[index].key)
			{
				index = j;
			}
		}
		if(index!=i){
					pdata[0]=pdata[i];
					pdata[i]=pdata[index];
					pdata[index]=pdata[0];

		}
	}
}

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

hanjinrong

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者