前面給出了插入排序,其基于插入牌的機(jī)制
下面給出選擇排序和冒泡排序的原理和實(shí)現(xiàn)
選擇排序:
就是從后面的部分選擇最小值(或者最大值)來代替前者,核心算法為:
for(int i=0;i<size;i++)
{
//assume the smallest value is at size-1
int temp = arr[size-1];
int index = size-1;
//compare the rest(from i--->size-1)
for(j=i;j<size-1;j++)
{
if(arr[j]<temp)
{
temp = arr[j];
index = j;
}
}
//exchange the value
if(index!=i)
{
arr[index]=arr[i];
arr[i]=temp;
}
}
具體代碼實(shí)現(xiàn)為:
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
int main(int argc,char* argv[])
{
int arr[]={5,6,1,2,7,3,8,10,4,9};
int size = sizeof(arr)/sizeof(arr[0]);
copy(arr,arr+size,ostream_iterator<int>(cout," "));
cout<<endl;
for(int i=0;i<size;i++)
{
int temp = arr[size-1];
int index = size-1;
for(int j=i;j<size-1;j++)
{
if(arr[j]<temp)
{
temp = arr[j];
index = j;
}
}
if(i!=index)
{
arr[index]=arr[i];
arr[i]=temp;
}
}
copy(arr,arr+size,ostream_iterator<int>(cout," "));
cout<<endl;
system("pause");
return 0;
}
冒泡算法主要是從后面開始往上面進(jìn)行冒泡,需要冒泡的話,必須要相鄰的元素之間進(jìn)行比較,其實(shí)現(xiàn)代碼如下:
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
int main(int argc,char* argv[])
{
int arr[]={5,6,1,2,7,3,8,10,4,9};
int size = sizeof(arr)/sizeof(arr[0]);
copy(arr,arr+size,ostream_iterator<int>(cout," "));
cout<<endl;
for(int i=0;i<size;i++)
for(int j=size-1;j>i;j--)
{
if(arr[j]<arr[j-1])
{
int temp = arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
copy(arr,arr+size,ostream_iterator<int>(cout," "));
cout<<endl;
system("pause");
return 0;
}