各个排序算法分析与优化:
(全部以升序为例子)
1.冒泡排序:
算法:从头开始比较每一对相邻元素,如果第一个元素比第二个元素大,就交换他们的位置。
代码演示:
void test01()
{
int array[] = { 56,9,10,19,28,37,34 };
int length = sizeof(array) / sizeof(int);
for (int end = length - 1; end > 0; end--)
{
for (int begin = 1; begin <= end; begin++)
{
if (array[begin] < array[begin - 1])
{
int tmp = array[begin];
array[begin] = array[begin - 1];
array[begin - 1] = tmp;
}
}
}
for (int i = 0; i < length; i++)
{
cout << array[i] << "_";
}
}
冒泡优化1:
//冒泡排序优化1
void test02()
{
int array[] = { 56,9,10,19,28,37,34 };
int length = sizeof(array) / sizeof(int);
for (int end = length - 1; end > 0; end--)
{
bool flags = true;//假设每次否是排好序的
for (int begin = 1; begin <= end; begin++)
{
if (array[begin] < array[begin - 1])
{
int tmp = array[begin];
array[begin] = array[begin - 1];
array[begin - 1] = tmp;
//如果有交换 代表没有排好序
flags = false;
}
}
if (flags == true)
{
break;
}
}
for (int i = 0; i < length; i++)
{
cout << array[i] << "_";
}
}
冒泡优化2:
//冒泡排序优化2
void test03()
{
int array[] = { 56,9,10,19,28,37,34 };
int length = sizeof(array) / sizeof(int);
for (int end = length - 1; end > 0; end--)
{
int sortedIndex = 1;
for (int begin = 1; begin <= end; begin++)
{
if (array[begin] < array[begin - 1])
{
int tmp = array[begin];
array[begin] = array[begin - 1];
array[begin - 1] = tmp;
sortedIndex = begin;
}
}
end = sortedIndex;
}
for (int i = 0; i < length; i++)
{
cout << array[i] << "_";
}
}
选择排序:
算法:
//选择排序+稳定性
void test11()
{
int array[] = { 56,56,9,10,19,28,37,34 };
int length = sizeof(array) / sizeof(int);
for (int end = length - 1; end > 0; end--)
{
int maxIndex = 0;
for (int begin = 1; begin <= end; begin++)
{
if (array[maxIndex] <= array[begin])
{
maxIndex = begin;
}
}
int tmp = array[maxIndex];
array[maxIndex] = array[end];
array[end] = tmp;
}
for (int i = 0; i < length; i++)
{
cout << array[i] << "_";
}
}