for(int i = 0; i < n; i ++) for(int j =1;j < n -i; j ++) if(a[j] < a[j - 1]) { int t = a[j - 1] ;
a[j -1] = a[j] ;
a[j] = t ; }
选择排序的原理:每次在剩余的元素中选择一个最大值,使数组有序。 代码如下:
for(int i =0; i < n; i ++) { int maxn = i ; for(int j = 0; j < n - i; j ++) if(a[j] > maxn) maxn = j ; int t = a[maxn] ; a[maxn] = a[n - i - 1] ; a[n - i - 1] = t ; }
插入排序原理:把一个值从尾部逐次比较,直到大于等于前面的值为至。 代码如下: void selfinsert() { for(int i = 0; i < n; i ++) { int temp = a[i] ; int k = i ; for(int j = i -1; j >= 0; j --) { if(a[j] > temp) { a[j + 1] = a[j] ; k = j ; } } a[k] = temp ; } }
下面有个程序代码: #include <iostream> #define mx 50 using namespace std; int a[mx] ; int n ; void selfinsert() { for(int i = 0; i < n; i ++) { int temp = a[i] ; int k = i ; for(int j = i -1; j >= 0; j --) { if(a[j] > temp) { a[j + 1] = a[j] ; k = j ; } } a[k] = temp ; } } int main() { while(cin >> n) { for(int i = 0; i < n; i ++) { cin >> a[i] ; } selfinsert() ; for(int i = 0; i < n; i ++) { cout << a[i] << " " ; } cout << endl; } return 0 ; } 完善下sort()排序吧。 快排的思想是:通过一次分割,将无序序列分成两部分,其中前一部分的元素不大与后一部分的元素。然后用同样的方法,把前一部分和后一部分排序。知道排序完成。 对序列a的分割过程:首先,在序列的第一个,中间一个及最后一个元素中选取中项,得a(k),然后设置两个指针i和j分别指向序列的第一个和最后一项。 代码如下: void selfsort(int left , int right) { int i = left ; int j = right ; int temp = a[(right + left)/2] ;