您的位置:首页 > 编程语言 > C语言/C++

c语言实现选择排序

2015-05-22 16:06 337 查看
选择排序的思想是将待排序的数组进行循环,从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];

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息