#include
#include
using
namespace std;
//排序演算法(時間複雜度:最好,最壞,平均)
//插入排序
void
insert_sort
(int arr,
int n)
arr[j+1]
= temp;}}
}//折半插入排序
void
insert02_sort
(int arr,
int n)
else
}for
(j = i-
1;j>=low;j--
) arr[low]
= temp;
//插入操作}}
//希爾排序
void
shellsor
(int arr,
int n)
arr[j+d]
= arr[0]
;//插入}}
}}//氣泡排序
void
bubblesort
(int arr,
int n)}if
(tag ==
false
)return;}
}//快速排序
//本身有序的時候效率最低
//優化:對於基準的選取盡量選取中間大的
inttemptition
(int arr,
int low,
int high)
//比基準小的移到low的位置
arr[low]
= arr[high]
;//比基準小的不動,一直向左找到大於基準的元素
while
(low<=temp)
//比基準大的移到high的位置
arr[high]
= arr[low];}
//將基準元素插入的相應位置
arr[low]
= temp;
//將最後停留的位置返回
return low;
}void
quicksort
(int arr,
int low,
int high)
}//簡單選擇排序
void
selectsort
(int arr,
int n)}if
(min!=i)}}
//堆排序
void
headadjust
(int arr,
int k,
int len)
if(arr[0]
>=arr[i]
)break
;//篩選結果
else
} arr[k]
= arr[0]
;//被篩選結點的值放入最終位置
}//建立大根堆
void
buildmaxheap
(int arr,
int len)
}void
heapsort
(int arr,
int len)
}//歸併排序
int n =10;
//另外開闢的陣列,用來臨時儲存分開的陣列
int*arr02 =
newint
[n];
//合併操作
void
merge
(int arr,
int low,
int mid,
int high)
//按照兩個分開的部分第乙個數值的大小放到原陣列中
//k指的是原陣列,i,j分別指向分開的兩個部分
for(i = low,j = mid+
1,k = i;i<=mid&&j<=high;k++
)else
}//兩個部分中多出來的一部分也要放進去
while
(i<=mid)
while
(j<=high)
}void
mergesort
(int arr,
int low,
int high)
}//基數排序
intmain()
;heapsort
(arr,10)
;//0
selectsort
(arr,10)
;quicksort
(arr,0,
9);insert_sort
(arr,10)
;shellsor
(arr,10)
;//0
for(
int i =
0;i<
10;i++
)return0;
}
考研資料結構 排序
人生哪有最好,把每乙個當下做到最好,就很不錯了呀。以下以考試主要考查的重點內容為主體,講述過程以方便大家記憶為上,並不面面俱到。首先得知道排序分內部排序和外部排序。內部排序 排序整個過程中資料在記憶體中。外部排序 排序整個過程中資料會有出現在內 外存之間調動的情況。考研主要考內部排序。內部排序主要分...
資料結構 考研 快速排序
快速排序有三種寫法,平均複雜度幾乎相同。我們這裡給出最常見的那種,把第乙個元素拎出來,然後找到它該去的地方再塞進去。快速排序和氣泡排序都屬於交換排序,都屬於不穩定排序。一趟快速排序定乙個位置,並且把區間分為兩部分。int partition int arr,int i,int j 小於基準值左移 正...
資料結構 考研 拓撲排序
獲得乙個圖的拓撲排序可以有深搜和廣搜兩種途徑。深搜是逆向思維,遍歷到遞迴最深處,層層返回的時候把結點壓棧,得到的是乙個逆序拓撲序列。廣搜是正向思維,從度為 0 的結點入手,每次將度為 0 的結點入隊,直到全部遍歷。深搜 int visited 5 visited有三種狀態,未搜尋 0 搜尋中 1 搜...