插入排序使用的是增量方法:在排好序的子数组A[1:j-1]后,将元素A[j]插入,形成排好序的子数组A[1:j].
插入排序的代码(C++):
1 /*
2 *
3 *
4 * Filename: insert_sort.cc
5 *
6 * Description: insert sort
7 *
8 * Version: 1.0
9 * Created: 2011年03月12日 23时15分09秒
10 * Revision: none
11 * Compiler: gcc
12 *
13 * Author: Moking (ac), tzrac119@gmail.com
14 * Company: Unknown
15 *
16 *
17 */
18
19 #include<iostream>
20
21 using namespace std;
22
23 int main()
24 {
25 int A[]={5,2,4,6,1,3};
26 int i,j,key;
27
28 for(j = 1; j != 6; j++)
29 {
30 //每次循环插入的值赋给key
31 //其中A[1:j-1]是已排序的。
32 key=A[j];
33 i = j-1;
34 while((i != -1) && A[i] > key)
35 {
36 //交换顺序
37 A[i+1] = A[i];
38 i--;
39 }
40 A[i+1]=key;
41 }
42 //输出结果
43 for(int k = 0; k != 6; k++)
44 cout << A[k] << " " ;
45 cout << endl;
46 return 0;
47 }
合并排序算法采用“分治法“。
/*
*
* Filename: merge_sort.cc
*
* Description: merge sort
*
* Version: 1.0
* Created: 2011年03月12日 23时51分38秒
* Revision: none
* Compiler: gcc
*
* Author: Moking (ac), tzrac119@gmail.com
* Company: Unknown
*
*/
#include<iostream>
using namespace std;
int MAX=32767;
//合并函数
void merge(int *A,int p,int q,int r)
{
int n1 = q - p + 1;
int n2 = r - q;
//初始化数组元素
int L[n1+1];
int R[n2+1];
for(int i = 0; i != n1; i++)
L[i] = *(A+p+i-1);
for(int j = 0; j != n2; j++)
R[j] = *(A+q+j);
//通过设置"哨兵牌",避免检查是否没堆牌是否为空
L[n1] = MAX;
R[n2] = MAX;
int i1=0,j1=0;
for(int k = p-1 ; k != r; k++)
{
if(L[i1] <= R[j1])
{
*(A+k) = L[i1];
i1++;
}
else
{
*(A+k) = R[j1];
j1++;
}
}
}
void merge_sort(int *A,int p,int r)
{
if(p < r)
{
int q = (p+r)/2;
merge_sort(A, p, q);
merge_sort(A, q+1, r);
merge(A, p, q, r);
}
}
int main()
{
int A[] = {13,14,15,8,9,1,3,4,7,5,2,6,10,11,12};
merge_sort(A,1,15);
//输出结果
for(int i=0; i!=15; i++)
cout << A[i] << " " ;
cout << endl;
return 0;
}
冒泡排序算法是一种流行的排序算法,它重复地交换相邻的两个反序元素。
/*
* =====================================================================================
*
* Filename: bubble_sort.cc
*
* Description: bubble sort
*
* Version: 1.0
* Created: 2011年03月13日 00时48分14秒
* Revision: none
* Compiler: gcc
*
* Author: Mnking (ac), tzrac119@gmail.com
* Company: Unknown
*
* =====================================================================================
*/
#include <iostream>
using namespace std;
int main()
{
int ia[]={2,3,5,8,9,7,18,27,38,32,54,18,6,12,21};
for(int i = 0; i != 15;i++)
{
for(int j = 14;j != i; j--)
{
if(ia[j]<ia[j-1])
{
int temp = ia[j-1];
ia[j-1] = ia[j];
ia[j] = temp;
}
}
}
//输出结果
for(int j1 = 0; j1 != 15;j1++)
cout << ia[j1] << " ";
cout << endl;
return 0;
}