冒泡排序和选择排序C++实现

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。

 

选择排序的基本概念是:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。 

 

#include <stdio.h>
#include 
<tchar.h>
#include 
<cstdlib>
#include 
<iostream>
#include 
<sys/timeb.h>
#include 
<ctime>
#include 
<climits>
#include 
<cassert>

using namespace std;

//冒泡排序
void BubbleSort(int *arr,int len)
{
    
//检测输入参数
    assert(arr!=NULL);

    
//判断一轮检测是否有交换
    bool change = true;

    
//有交换才继续排序
    for(int i= len-1; i > 1 && change; --i)
    {
        change 
= false;
        
for(int j=0;j<i; ++j)
        {
            
if(arr[j] > arr[j+1])
            {
                
int tmp = arr[j];
                arr[j] 
= arr[j+1];
                arr[j
+1= tmp;
                change 
= true;
            }
        }
    }
}

//选择排序
void SelectionSort(int *arr,int len)
{
    
//输入参数检测
    assert(arr!=NULL);
    
    
//最小值所在值的下标
    int min = 0;

    
//len个数,只需要进行len-1次选取就可以了,最后一个就是最大的值
    for(int i = 0; i < len - 1++i)
    {
        
//第i个最小值下标
        min = i;

        
//选取最小值的下标(前面i个数据已经排好序了)
        for(int j = i + 1; j < len ; ++j)
        {
            
if(arr[j] < arr[min])
            {
                
//记录最小值的下标
                min = j;
            }
        }

        
//交换最小值到位置i
        if(min != i)
        {
            
int temp = arr[min];
            arr[min] 
= arr[i];
            arr[i] 
= temp;
        }
    }

}

int _tmain(int argc, _TCHAR* argv[])
{   
    
int arrLen = 0;
    cout 
<< "please input the size of the array : " << endl;
    cin 
>> arrLen;
    
int* arr = new int[arrLen];
    
int* arr2 = new int[arrLen];
    
for(int i=0;i<arrLen;++i)
    {
        arr[i] 
= rand() % 100;
        arr2[i] 
= rand() % 100;
    }
    
    cout 
<< "冒泡排序原始的数组为:" ;
    
for(int i=0;i<arrLen;++i)
    {
        cout 
<< arr[i] << " ";
    }

    BubbleSort(arr,arrLen);
    
    cout 
<< endl << "冒泡排序的数组为:" ;
    
for(int i=0;i<arrLen;++i)
    {
        cout 
<< arr[i] << " ";
    }

    cout 
<< "选择排序原始的数组为:" ;
    
for(int i=0;i<arrLen;++i)
    {
        cout 
<< arr2[i] << " ";
    }

    SelectionSort(arr2,arrLen);
    
    cout 
<< endl << "选择排序的数组为:" ;
    
for(int i=0;i<arrLen;++i)
    {
        cout 
<< arr2[i] << " ";
    }

    system(
"pause");
    
return 0;
}

 

 

posted on 2010-10-27 09:54  虚怀若谷  阅读(7006)  评论(0编辑  收藏  举报

导航