必备内容
黑字加粗部分表示重点内容
算法:
-
八种排序及其性能分析:
- 冒泡排序:
- 冒泡排序:
思想
在要排序的一组数中,对当前还未排好序的范围内的全部数, 自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 每一趟排序后的效果都是讲没有沉下去的元素给沉下去。 <h2>流程</h2>
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数
- 针对所有的元素重复以上的步骤,除了最后一个
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
实现:
图片:
算法实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define N 8
void Bubble_sort(int *arr, int len);
int main(void)
{
int arrary[N] = {3,2,5,8,4,7,6,9};
printf("冒泡排序!");
printf("\n");
// printf("输入待排序数字");
// for(int i=0;i<N;i++){
// scanf("%d",&arrary[i]);
// }
//原始数据
for(int i=0;i<N;i++){
printf("%d\t",arrary[i]);
}
printf("\n");
printf("----------------------------------------------");
printf("\n");
//排序
Bubble_sort(arrary,N);
//结果
for(int i=0;i<N;i++){
printf("%d\t",arrary[i]);
}
}
void Bubble_sort(int *arr, int len)
{
assert(arr != NULL);
int tmp = 0;
bool swap = false;//加判断条件 减少比较次数
for (int i = 0; i < len -1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (arr[j] > arr[j + 1])//升序
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;//交换
swap = true;
}
}
if (!swap)
{
return;
}
}
}
- 快速排序: