1. 程式人生 > >模板庫排序函式呼叫方法

模板庫排序函式呼叫方法

#include<iostream>
#include<cstring>
#include<stdio.h>
 
#include<stdlib.h> // qsort head file
#include<algorithm> // sort head file

using namespace std;

int cmp(const void *a, const void *b)
{
     //return (*(int *)a-*(int *)b); // 升序排列
     return (*(int *)b-*(int *)a);  // 降序排列
}

bool compare(int a, int b)
{
	//return a < b; // 升序排列
	return a > b; // 降序排列 
}

int main()
{
	//1 定義變數 
	int n;
	int a[1000];
	memset(a, 0, sizeof(a));
	
	//2 輸入數列 
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	
	
	//3 輸出排序前數列 
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " "; 
	}
	cout << endl;
	cout << endl;
	
	//4 模板庫快速排序

	qsort(a, n, sizeof(a[0]), cmp);
	
	sort(a, a+n, compare);
	
	//5 輸出排序後數列 
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " "; 
	}
	cout << endl;
	 
	return 0;
}

// 排序總結: 
// 時間複雜度:插入排序、氣泡排序、選擇排序:O(n2)
// 時間複雜度:快速排序、堆排序、歸併排序: O(nlog2n)
// 時間複雜度:桶排序: O(n)

// 適用場景: 
// 快速排序:是目前基於比較的內部排序中最好的方法,當待排序的關鍵字是隨機分佈時,快速排序的平均時間最短。
// 桶排序: 當待排序的記錄的關鍵字在一個明顯有限範圍內時,且空間允許,建議使用桶排序。 
// 氣泡排序:當參加排序的序列區域性或整體有序時,能達到較快的排序速度。
// 選擇排序:當 n 較小,選擇排序最容易理解。