為什麼要排序
1. 有時應用本身就需要對資訊進行排序。例如對財務報表進行排序
2. 很多演算法通常把排序作為關鍵子程式,關鍵技術也體現在排序演算法中
演算法最壞情況執行時間
平均情況/期望執行時間
插入排序
o(n^2)
o(n^2)
堆排序o(n lgn)
--快速排序
o(n^2)
o(n lgn)
1. 插入排序
/*插入排序
p :待排序陣列
len :待排序陣列長度
*/void insertsort(int p,int len)
p[pos + 1] = cur; //將待排序元素插入陣列中
}}
2. 堆排序
#define int_max 0x7fffffff
#define int_min (0-int_max)
/* 最大堆排序
a :待排序陣列
s : 父節點
len : 需要排序的堆長度
*/void heapadjustmax(int a,int s,int len)//一次篩選的過程
else
break;
}}/*最小堆排序*/
void heapadjustmin(int a,int s,int len)//一次篩選的過程
else
break;
}}/*
a : 待排序陣列
n : 陣列長度
*/void heapsort(int a,int n)
for(i = n;i > 1;i--) //末尾向前移動
}
3. 快速排序
/**************************快速排序法***********************************/
/* a :待排序陣列
left:左邊界
right:右邊界
*/void quicksort(int a,int left,int right)
; int i;
int length = sizeof(num)/sizeof(num[0]);
// insertsort(num,length); //插入排序
// heapsort(num,length); //堆排序
quicksort(num,0,length-1);
for(i=0;i < length;i++)
printf("%d\t",num[i]);
return 0;
}
插入排序,快速排序,堆排序,歸併排序
插入排序 void insert sort int arry,int length 快速排序 int quick adj int arry,int low,int high else if arry high low 2 arry low arry high low 2 arry high arry...
插入排序 選擇排序 氣泡排序 快速排序 堆排序
設待排序陣列為a n 1 直接插入排序 思想 將陣列a n 分為乙個有序區a 1 a i 和乙個無序區a i 1 a n 1 每一次將a i 1 插入有序區,形成乙個新的有序區,如此反覆。如下 include stdafx.h include using namespace std typedef ...
插入排序 合併排序 堆排序和快速排序
插入排序 時間複雜度o n2 param array原地排序演算法 public void insertsort int array array position present 合併排序 o nlogn param array param left 第乙個索引 param right 最後乙個索引...