演算法分析
實現
//*****====快排演算法*****====
//使得arr[low]..arr[q-1]中的每乙個元素都小於等於arr[q], arr[q]也小於等於arr[q+1]..arr[high]。
//簡而言之,讓左邊的數字都小於右邊的數字
//最壞時間複雜度:n^2 , 平均時間複雜度:n*lg(n)
//優化:為了使得輸入均勻的分布,對輸入使用隨機數
//排序乙個陣列,初始呼叫qsort(a,0,a.size()-1).
//*************************
int partirtion(int a,int low,int high)
}//將主元(pivot)給到i的下乙個
int temp = a[i+1];
a[i+1] = a[high];
a[high] = temp;
return i+1;
}void qsort(int arr, int low, int high)
}
演算法分析
實現
//**********===插入排序**********
//從插入的位置起步,往前作比較,輸入n指長度
//******************************=
void insertsort(int a,int n)
//j+1就是需要插入的位置
a[j + 1] = key;
}}
演算法分析
實現
//**********=歸併排序**********
//merge就是合併的過程,相當於在兩堆排好序的牌中,每次選取最上面的兩張進行比較,選取其中較小的一張
//a是陣列,p<=q演算法分析
實現//**********=計數排序**********====
//函式輸入為:input輸入陣列、n是輸入和輸出陣列的長度、k是陣列中的最大數
//******************************==
void countsort(int input, int n, int k)
//記錄輸入有多少個當前counter下標的值
for(int i = 0;i < n;i++)
//對每乙個下標記錄與之前的求和,求和的結果就是下標在輸出陣列的位置
for(int i = 1; i <= k;i++)
//通過計數器定址,對輸出賦值
for(int i = n-1;i >=0;i--)
//將輸出給輸入
for(int i = 0;i < n;i++)
}
演算法分析
實現
//*****====基數排序***************
//先求出所有數中最大數字的位數
//再根據鍵值的每一位數字,來分配乙個桶
//******************************=
int maxbit(int data, int n) //輔助函式,求資料的最大位數
int d = 1;
int p = 10;
while (maxdata >= p)
return d;
}void radixsort(int data, int n) //基數排序
for(j = 1; j < 10; j++)
count[j] = count[j - 1] + count[j]; //將tmp中的位置依次分配給每個桶
for(j = n - 1; j >= 0; j--) //將所有桶中記錄依次收集到tmp中
for(j = 0; j < n; j++)
radix = radix * 10;
}delete tmp;
delete count;
}
常用排序演算法
筆者最近學習演算法,學了很久也只弄懂了幾個排序演算法,在這裡曬一下下,作為以後參考之用。一 為什麼要研究排序問題 許多計算機科學家認為,排序演算法是演算法學習中最基本的問題,原因有以下幾點 l有時候應用程式本身需要對資訊進行排序,如為了準備客戶賬目,銀行需要對支票賬號進行排序 l很多演算法將排序作為...
常用排序演算法
一 簡單排序演算法 由於程式比較簡單,所以沒有加什麼注釋。所有的程式都給出了完整的執行 並在我的vc環境 下執行通過。因為沒有涉及mfc和windows的內容,所以在borland c 的平台上應該也不會有什麼 問題的。在 的後面給出了執行過程示意,希望對理解有幫助。1.冒泡法 這是最原始,也是眾所...
常用排序演算法
排序演算法 最好時間 平均時間 最壞時間 輔助空間 穩定性 直接插入排序 o n o n 2 o n 2 o 1 穩定 希爾排序 o n 1.3 o 1 不穩定 直接選擇排序 o n 2 o n 2 o n 2 o 1 不穩定 堆排序 o n x lbn o n x lbn o n x lbn o ...