1.排序
该章节一共讲解七种排序算法:
1.冒泡排序
2.简单选择排序
3.直接插入排序
4.希尔排序
5.堆排序
6.归并排序
7.快速排序
2.冒泡排序
1.最简单排序代码
/*最简单排序实现函数*/
using namespace std;
#define MAXSIZE 10
typedef struct
{
int r[MAXSIZE + 1];
int length;
}SqList;
SqList list = { {9,1,5,8,3,7,4,6,2},9 };
void swap(SqList *L, int i, int j) //交换数组中两个元素
{
int temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
void BubbleSort0(SqList *L)
{
int i, j;
for (i = 0; i < L->length; i++)
{
for (j = i+1; j < L->length; j++)
{
if (L->r[j] < L->r[i])
swap(L, i, j);
}
}
}
/*test脚本*/
int main()
{
cout << "原来:";
for (int i = 0; i < list.length; i++)
{
cout << list.r[i];
}
cout << endl;
BubbleSort0(&list);
cout << "排序后:";
for (int i = 0; i < list.length; i++)
{
cout << list.r[i];
}
cout << endl;
}
测试结果:
原来:915837462
排序后:123456789
2.普通冒泡排序代码
void BubbleSort(SqList *L)
{
int i, j;
for (i = 0; i < L->length; i++)
{
for (j = L->length - 1; j > 0; j--)
{
if (L->r[j] < L->r[j - 1])
swap(L, j-1, j);
}
}
}
测试结果同上:
原来:915837462
排序后:123456789
3.改进冒泡排序代码
void BubbleSort(SqList *L)
{
int i, j;
bool flag = true; //设置一个标志位
for (i = 0; i < L->length && flag; i++)
{
flag = false;
for (j = L->length - 1; j > 0; j--)
{
if (L->r[j] < L->r[j - 1])
{
swap(L, j - 1, j);//如果有元素交换
flag = true;//将标志位设置为true表示需要继续循环交换
}
}
}
}