必備內容
黑字加粗部分表示重點內容
算法:
-
八種排序及其性能分析:
- 冒泡排序:
- 冒泡排序:
思想
在要排序的一組數中,對當前還未排好序的範圍內的全部數, 自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。 即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。 每一趟排序後的效果都是講沒有沉下去的元素給沉下去。 <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;
}
}
}
- 快速排序: