// select.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
/*
选择排序:
每一趟找到数值最小的位置号,如果此位置号与当前数组最低位置号不同,则此位置号与当前数组最低位号交换。
交换采用异或实现,不用中间变量
比较:
给出数组中,最小值位置临时变量对应的值分别与以后各数据位比较,如果值小,则将此位置号放到最小值位置临时变量中。
移动:
最小值位置与数组最小位置不同,则这2种位置进行值交换
临时变量:
一个整形临时变量,用于存放最小值位置
*/
int minNum(int * list,int nListLen,int beginNum)// 在数组list中,从list[beginNum,...,nListLen-1]找出数值最小的位置号,并返回位置号
{
int nMinNum=beginNum;
for(int i = beginNum+1; i < nListLen; ++i)
{
if (*(list+i)<*(list+nMinNum))
{
nMinNum = i;
}
}
return nMinNum;
}
void selectSort(int * list,int nListLen)
{
int m = 0;
for (int i = 0; i < nListLen; ++i)
{
m = minNum(list,nListLen,i);
if (m != i)// 异或实现2数交换
{
*(list+m) = *(list+m)^*(list+i);
*(list+i) = *(list+m)^*(list+i);
*(list+m) = *(list+m)^*(list+i);
}
}
}
template <typename T>
void printArray(T*list,int nLen)
{
for (int i = 0; i < nLen; ++i)
{
printf("%d\t",*(list+i));
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int data[]={5,2,1,6,4,3};
selectSort(data,sizeof(data)/sizeof(int));
printArray(data,sizeof(data)/sizeof(int));
return 0;
}
//
#include "stdafx.h"
/*
选择排序:
每一趟找到数值最小的位置号,如果此位置号与当前数组最低位置号不同,则此位置号与当前数组最低位号交换。
交换采用异或实现,不用中间变量
比较:
给出数组中,最小值位置临时变量对应的值分别与以后各数据位比较,如果值小,则将此位置号放到最小值位置临时变量中。
移动:
最小值位置与数组最小位置不同,则这2种位置进行值交换
临时变量:
一个整形临时变量,用于存放最小值位置
*/
int minNum(int * list,int nListLen,int beginNum)// 在数组list中,从list[beginNum,...,nListLen-1]找出数值最小的位置号,并返回位置号
{
int nMinNum=beginNum;
for(int i = beginNum+1; i < nListLen; ++i)
{
if (*(list+i)<*(list+nMinNum))
{
nMinNum = i;
}
}
return nMinNum;
}
void selectSort(int * list,int nListLen)
{
int m = 0;
for (int i = 0; i < nListLen; ++i)
{
m = minNum(list,nListLen,i);
if (m != i)// 异或实现2数交换
{
*(list+m) = *(list+m)^*(list+i);
*(list+i) = *(list+m)^*(list+i);
*(list+m) = *(list+m)^*(list+i);
}
}
}
template <typename T>
void printArray(T*list,int nLen)
{
for (int i = 0; i < nLen; ++i)
{
printf("%d\t",*(list+i));
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int data[]={5,2,1,6,4,3};
selectSort(data,sizeof(data)/sizeof(int));
printArray(data,sizeof(data)/sizeof(int));
return 0;
}