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

来源:互联网 发布:卖家怎么投诉淘宝买家 编辑:程序博客网 时间:2024/05/10 06:09
冒泡排序和选择排序C++实现

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

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


Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#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;}


0 0
原创粉丝点击