1. 程式人生 > 其它 >13.4常用內建方法

13.4常用內建方法

一.排序

1.快速排序程式碼

#include<stdio.h>
#define Max 100  //儲存的最大值

int Sort(int A[],int head,int end) {
	printf("%d %d\n", head, end);
	int Standard = A[head];        //標準值為最左邊的數
	while (head < end) {
		while (A[end] >= Standard && head < end)
			end--;
		A[head] = A[end];
		while (A[head] <= Standard&& head < end)
			head++;
		A[end] = A[head];
	}
	A[head] = Standard;
	return end;
}

void Circle(int A[],int head,int end) {
	if (head < end) {
		int temp;
		temp = Sort(A, head, end);
		Circle(A, head, temp-1);
		Circle(A, temp+1, end);
	}
}

void Print(int A[],int n) {
	for (int i = 0; i < n; i++)
		printf("%d\t", A[i]);
}

int main() {
	int n,A[Max];
	printf("請輸入n:\n");
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++)
		scanf_s("%d", A + i);
	Circle(A, 0, n-1);
	Print(A, n);
}

2.過程

i.Sort函式:將小於標準值的數放在標準值的左邊,大於的放在右邊。

ii.Circe函式:主要做遞迴,分為三步走:

a.將陣列放入Sort函式裡進行排序。
b.將排序後的陣列的左邊放進Sort陣列進行排序。
c.將排序後的陣列的右邊邊放進Sort陣列進行排序。

3.如何避免最壞的情況

i.分析

a.如果標準值剛好取到最大值或者最小值,此時遞迴是深度就會比其他情況更大,所以快排很不穩定。
b.快排詳細分析

ii.改進

a.快排優化