选择排序
以升序为例,设有长度为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;;
}
运行结果: