65,170
社区成员




template <class T>
void bubble_sort( T a[], int n )
{ // 稳定的排序
// 交换标志exchanged,我们希望用这个标志减少不必要的扫描.
// 当它为真时,表明交换之前数组无序,但我们也不能确保在交换之后数组每一个
// 元素都排到有序状态下的正确位置了,所以再对数组进行扫描是必要的.
// 当它为假时,表明数组有序了,不必再对数组进行扫描了.
bool exchange = true; // 算法开始前,自然假设数组无序
for( int i = n - 1; i > 0 && exchange; --i ) { // 最多做n-1趟扫描
exchange = false; // 在一趟扫描开始前,我们总假设这趟扫描是不必要的
for( int j = 0; j < i; ++j ) { // 对当前无序区a[0:i]进行扫描
if( a[j+1] < a[j] ) {
std::swap( a[j+1], a[j] ); // 大的往下沉,而小的往上冒
exchange = true; // 发生了交换,故将交换标志置为真
}
}
}
}
template <class T>
void selection_sort( T a[], int n )
{ // 不稳定; 反例: { 2, 2, 1 }
int min;
for( int i = 0; i < n - 1; ++i ) { // 最多做n-1趟排序
min = i; // 先假设a[i]最小
for( int j = i + 1; j < n; ++j ) // 在当前无序区a[i:n-1]中查找最小值
if( a[j] < a[min] )
min = j; // min记下当前无序区最小值所在位置
if( min != i ) // 找到比当前a[i]更小者
std::swap( a[i], a[min] );
}
}
#include <iostream.h>
void BubbleSort(int* pData,int Count)
{
int iTemp;
for(int i=1;i<Count;i++)
{
for(int j=Count-1;j>=i;j--)
{
if(pData[j]<pData[j-1])
{
iTemp = pData[j-1];
pData[j-1] = pData[j];
pData[j] = iTemp;
}
}
}
}
void main()
{
int data[] = {10,9,8,7,6,5,4};
BubbleSort(data,7);
for (int i=0;i<7;i++)
cout<<data[i]<<" ";
cout<<"\n";
}
#include <iostream.h>
void SelectSort(int* pData,int Count)
{
int iTemp;
int iPos;
for(int i=0;i<Count-1;i++)
{
iTemp = pData[i];
iPos = i;
for(int j=i+1;j<Count;j++)
{
if(pData[j]<iTemp)
{
iTemp = pData[j];
iPos = j;
}
}
pData[iPos] = pData[i];
pData[i] = iTemp;
}
}
void main()
{
int data[] = {10,9,8,7,6,5,4};
SelectSort(data,7);
for (int i=0;i<7;i++)
cout<<data[i]<<" ";
cout<<"\n";
}