选择排序&冒泡排序

选择排序

以升序为例,设有长度为length的数组array[length]。第一轮将array[0]和其他元素比较,如果array[0]较大,则交换,到array[length-1]为止,即array[0]存放最小的数值,第二轮从array[1]开始比较,…第length-1轮从array[length-2]开始比较。实现如下:

/**********************************************************
* 函数:Sort_Select
* 描述:选择排序
* 参数:int array[] - 形参数数组名
        int length - 数组长度
* 返回:无
* 备注:升序
**********************************************************/
void Sort_Select(int array[], int length)
{
    
    
    int i,j;
    int temp;

    for (i = 0; i < length-1; i++)//执行Length次
    {
    
    
        for (j = i+1; j < length; j++)//2+3+...length=(length+2)(length-1)/2次
        {
    
    
            if (array[i] > array[j])
            {
    
    
                temp = array[j];
                array[j] = array[i];
                array[i] = temp;
            }
        }
        for (int k = 0; k < length; k++)
        {
    
    
            cout << "array[" << k << "]=" << array[k] << " ";
        }
        cout << endl;
    }
}

时间复杂度为O(n2)

冒泡排序

以升序为例,设有长度为length的数组array[length]。第一轮从array[0]到array[length-1],从array[0]开始将相邻元素作比较,array[j]>array[j+1]则交换,使最大值“冒”到array[length-1]的位置;第二轮从array[0]到array[length-2],做法同第一轮,将第二大数值“冒”到array[length-2]的位置…第length-1轮从array[0]到array[1],倒数第二大数值放在array[1]。冒泡排序可以改进:当一轮排序没有相邻元素交换位置,即可判定为正序,终止排序。实现如下:


/**********************************************************
* 函数:Sort_Bubble
* 描述:冒泡排序
* 参数:int array[] - 形参数数组名
        int length - 数组长度
* 返回:无
* 备注:升序
**********************************************************/
void Sort_Bubble(int array[], int length)
{
    
    
    int i,j;
    bool PSFlag;//正序标志
    int temp;

    for (i = length - 1; i > 0; i--)
    {
    
    
        PSFlag = true;
        for (j = 0; j < i; j++)
        {
    
    
            if (array[j]>array[j+1])
            {
    
    
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
                PSFlag = false;
            } 
        }      
        for (int k = 0; k < length; k++)
        {
    
    
            cout << "array[" << k << "]=" << array[k] << " ";
        }
        cout << endl;
        if (PSFlag==true)
        {
    
    
            break;
        }
    }
}

Main函数实现

main函数代码:

int main()
{
    
    
	const int length = 10;
	int array[length];

	//初始化数组
	//srand(time(0));
	for (int i = 0; i < length; i++)
	{
    
    
		array[i] = rand()%100;
	}
	//输出数组元素
	cout << "未排序之前的数组元素:" << endl;
	for (int i = 0; i < length; i++)
	{
    
    
		cout << "array[" << i << "]=" << array[i] << " ";
	}
	cout << endl << endl;;

	//选择排序
	cout << "选择排序:" << endl;
	Sort_Select(array,length);
	cout << endl;

	//选择排序后的数组元素
	cout << "经过选择排序之后的数组元素:" << endl;
	for (int i = 0; i < length; i++)
	{
    
    
		cout << "array[" << i << "]=" << array[i] << " ";
	}
	cout << endl << endl;;

	//重新初始化数组
	//srand(time(0));
	for (int i = 0; i < length; i++)
	{
    
    
		array[i] = rand() % 100;
	}
	//输出数组元素
	cout << "未排序之前的数组元素:" << endl;
	for (int i = 0; i < length; i++)
	{
    
    
		cout << "array[" << i << "]=" << array[i] << " ";
	}
	cout << endl << endl;;

	//冒泡排序
	cout << "冒泡排序:" << endl;
	Sort_Bubble(array, length);
	cout << endl;

	cout << "经过冒泡排序之后的数组元素:" << endl;
	for (int i = 0; i < length; i++)
	{
    
    
		cout << "array[" << i << "]=" << array[i] << " ";
	}
	cout << endl << endl;;
 }

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36439722/article/details/105741956