main.cc
/*-----------------------------------------------
Created By EverSteins
Email:EverSteins@gmail.com
转载请注明出处
------------------------------------------------*/
#include "stdafx.h"
#include <iostream>
using namespace std;
void SelectionSort1(int *p,int n)
{
for (int i=0;i<n-1;++i)
{
for (int j=i+1;j<n;++j)
{
if (p[j]<p[i]) //一共比较(n-1)*n/2次
{
int tmp=p[j];
p[j]=p[i];
p[i]=tmp;
}
}
}
}
//临时变量存储比较过程中的最小值,比SelectionSort1要快一些,因为不是在比较过程中直接交换值
void SelectionSort2(int *p,int n) //最优版选择排序算法
{
for (int i=0;i<n-1;++i)
{
int min=i;
for (int j=i+1;j<n;++j)
{
if (p[j]<p[min]) //一共比较(n-1)*n/2次
{
min=j;
}
}
if (min != i)//交换元素共执行(n-1)*3次语句
{
int tmp=p[i];
p[i]=p[min];
p[min]=tmp;
}
}
}
//SelectionSort的结构清晰版,同SelectionSort2
int MinIndex(const int *entry,int low,int high);
void Swap(int *entry,int index1,int index2);
void SelectionSort3(int *p,int n)
{
for (int i=0;i<n-1;++i)
{
int min_index=MinIndex(p,i,n-1);
Swap(p,i,min_index);
}
}
inline int MinIndex(const int *entry,int low,int high)
{
int min_index=low;
for (int current=low+1;current<=high;++current)
if (entry[current]<entry[min_index])
min_index=current;
return min_index;
}
inline void Swap(int *entry,int index1,int index2)
{
if (index1 != index2)
{
int tmp=entry[index1];
entry[index1]=entry[index2];
entry[index2]=tmp;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[6]={23,47,-15,2,99,98};
SelectionSort2(arr,6);
for (int i=0;i<6;++i)
cout<<arr[i]<<",";
cout<<endl;
cin.get();
return 0;
}