#1基础排序算法——冒泡排序
冒泡排序主要是通过多次 比较和交换 来实现;通过循环依次比较,不断把最小的数字排在该次比较中的最左边。即可将数组中的数按照从大到小的顺序排好。其示例代码如下:
void BubbleSort(int *a, int len) {
int i, j, k, temp;
for (i = 0; i < len - 1; i++)
{
for (j = len - 1; j > i; j--)
{
if (a[j - 1] > a[j]) {
temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
}
}
printf("第%d步的排序结果:", i);
for (k = 0; k < len; k++)
{
printf("%d ", a[k]);
}
printf("\n");
}
}
通过进行十个随机数字的冒泡排序,每次排序结果如下:
每次比较中最小的数字移向最左边,就像水中气泡冒出一样,因此该方法非常形象地叫做冒泡排序。不难发现,其时间复杂度为O(n2),空间复杂度为O(1)。
#2基础排序算法——选择排序
选择排序主要是通过多次选择和交换来实现:通过循环依次选出当前数字中最小的数并与其最左侧数字交换位置并将该数字从下次比较中剔除,最终获得数组中数字从小到大排列的顺序。其示例代码如下:
void SelectionSort(int *a,int len)
{
int i, j, k, h;
int temp;
for (i = 0; i < len - 1; i++) {
k = i;
for (j = i + 1; j < len; j++) {
if (a[j] < a[k])
k = j;
}
if (k != i) {
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
cout << "第" << i+1 << "步排序结果:";
for (h = 0; h < len - 1; h++) {
cout << a[h] << " ";
}
cout << endl;
}
}
通过进行十个随机数字的冒泡排序,每次排序结果如下:
不难发现,其时间复杂度为O(n2),空间复杂度为O(1)。选择排序与冒泡排序最大的差别就是交换的次数,前者是多比较少交换,后者是多比较交换。
#基础排序算法——插入排序
插入排序是对未排序的数据逐个交换到合适的插入位置而实现排序的目的。其示例代码如下:
void InsertionSort(int *a, int len)
{
int i, j, h, k;
for (i = 1; i < len; i++)
{
h = a[i];
j = i - 1;
while (j >= 0 && h < a[j]) {
a[j+1] = a[j];
j--;
}
a[j + 1] = h;
cout << "第" << i << "步的结果为";
for (k = 0; k < len; k++)
{
cout << a[k] << " ";
}
cout << endl;
}
}
通过进行十个随机数字的冒泡排序,每次排序结果如下:
其时间复杂度为O(n2),空间复杂度为O(1)。