// 排序演算法.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include#include#include#includeusing namespace std;
const int maxnum = 24;
void vecprint(vectorconst & num)
cout << endl;
for (auto i : num)
cout << endl;
}/*氣泡排序
比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
針對所有的元素重複以上的步驟,除了最後乙個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
*/void bubblesort(vector& num)
} lenth--;
} while (flag);
}/*選擇排序
第一趟從n個元素的資料序列中選出關鍵字最小/大的元素並放在最前/後位置,
下一趟從n-1個元素中選出最小/大的元素並放在最前/後位置。
以此類推,經過n-1趟完成排序。*/
void selectsort(vector& num)
} swap(num[j], num[minelementpos]); }}
/*插入排序
插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,
從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序*/
void insertsort(vector& num)
else
} }}
/*歸併排序 分治法*/
void mergearr(int a, int first, int mid, int last, int temp)
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}void mergesort(int a, int first, int last, int temp)
}bool mergesort(vector& num)
/*快速排序*/
int partition(int a, int low, int high)
} //經歷上面的迴圈之後下標為從low到i(包括i)的數就均為小於x的數了,現在將主元和i+1位置上面的數進行交換
a[high] = a[i + 1];
a[i + 1] = x;
return i + 1;
}void quicksort(int a, int low, int high)
}/*堆排序*/
int main()
random_shuffle(num.begin(), num.end());
vecprint(num);
//bubblesort(num);
//vecprint(num);
//insertsort(num);
//mergesort(num);
int n = num.size();
int *a = new int[n];
memcpy(a, &num[0], n * sizeof(int));
quicksort(a, 0, maxnum - 1);
//vecprint(num);
for (int i = 0; i < maxnum; i++)
delete a;
return 0;
}
java實現的一些簡單的排序演算法
冒泡 o n2 o n2 穩定 o 1 n小時較好 交換 o n2 o n2 不穩定 o 1 n小時較好 選擇 o n2 o n2 不穩定 o 1 n小時較好 插入 o n2 o n2 穩定 o 1 大部分已排序時較好 基數 o logrb o logrb 穩定 o n b是真數 0 9 r是基數 ...
複習總結 一些簡單的排序演算法
1.氣泡排序,氣泡排序屬於簡單排序的一種,也是大多數人學會的第乙個排序演算法,其基本思想是,從左到右掃瞄每個資料,跟它相鄰的比較,如果大小順序不對,就交換兩個資料的位置,這種演算法的最壞時間複雜度為n 2,屬於穩定排序的一種,然而,氣泡排序由於時間複雜度比較高,所以往往並不是最優演算法,然而,它有乙...
一些簡單的演算法
氣泡排序,比如你有五個數 3 4 2 1 0 其原理就是用沒個數和 其他數進行比較 下面我們來書寫每一輪的數值 第一輪 3 4 2 得出佇列 2 4 3 1 0 2 1 0 得出佇列 1 4 3 2 0 得出佇列 0 4 3 2 1 第二輪 4 3 得出佇列 0 3 4 2 1 3 2 1 得出佇列...