最近在學習演算法,趁這個機會總結一些演算法。慢慢更新,歡迎交流**。
排序:輸入:n個數
輸出:有序(從大到小、從小到大)序列
一、插入排序
做排序的都需要做遍歷,而插入排序,顧名思義,就是插隊。
不必多說,給個案例體會一下:
輸入:5 4 3 2 1
處理:輸出:1 2 3 4 5
輸入:6 8 2 4 5
處理:**如下(測試):
(排序部分第11-16行);
input:輸入陣列元素數n;輸入陣列元素a[i];輸入n=0**結束;
#include#includeusing namespace std;
int main()
for(int k=0;k二、選擇排序:
規則:首先找到陣列的最小數,與a[0]交換;迴圈下去,找到第n小的數,與陣列的第n個數交換;
案例:輸入: 5 4 9 8 3
處理:輸出:3 4 5 8 9
**如下:
#includeusing namespace std;
int main()
for (int j = 0; j < len2; j++)
l[len1]=r[len2]=int_max; //定義無窮大
int i = 0, j = 0;
for (int k = p; k <= r; k++)
else
}}void mergesort(int _array, int p, int r)
}int main()
}int temp=a[i];
a[i]=a[p];
a[p]=temp;
return i;
}void quicksort(int *a,int p,int q)
}int main()
}int temp=a[i];
a[i]=a[p];
a[p]=temp;
return i;
}int random_partition(int* a,int p,int q) //產生隨機數做下標,使得中間數是隨機的數
void quicksort(int *a,int p,int q)
}int main()
*/ counting_sort(a,b,n,c,m);
cout<<"and the result is:"<七、基數排序法
#include #include #include using namespace std;
int getmax(int a,int n)
void countingsort(int a,int n,int exp)
; int c[10]=;
for(int i=0;i=0;j--)
for(int i=0;i0;exp*=10)
countingsort(a,n,exp);
}int main()
cout
for(int i=0;icout
return 0;
}
經典排序演算法總結(C語言)
十種常見排序演算法一般分為以下幾種 1 非線性時間比較類排序 交換類排序 快速排序和氣泡排序 插入類排序 簡單插入排序和希爾排序 選擇類排序 簡單選擇排序和堆排序 歸併排序 二路歸併排序和多路歸併排序 2 線性時間非比較類排序 計數排序 基數排序和桶排序。總結 1 在比較類排序中,歸併排序號稱最快,...
經典排序演算法總結
排序演算法是離散數學和資料結構學科最基本的演算法,雖然知道這些排序演算法的名字,但是一直沒有研究過它們的實現原理。現在把它們收集起來,並一一親自實現,來加深對排序演算法的理解。1,氣泡排序 最簡單的排序演算法,從第乙個元素開始比較相鄰元素大小,如果前邊元素大於後邊元素則交換位置,否則將下標移到下乙個...
經典排序演算法總結
插入排序 選擇排序 歸併排序 排序方法 平均情況 最好最差 空間複雜度 穩定性氣泡排序o n2 o n 2 o n o n o n2 o n 2 o 1 o 1 穩定快速排序o nlogn o nlog n o nlogn o nlog n o n2 o n 2 o nlogn o nlog n 不...