一、插入排序
伪代码:
INSERTION-SORT (A, n) ⊳ A[1 . . n]
for j ← 2 to n
do key ← A[ j]
i ← j – 1
while i > 0 and A[i] > key
do A[i+1] ← A[i]
i ← i – 1
A[i+1] = key
代码
//insertion sort
void insertionSort (int *array, int length)
{
int key, temp;
for (int i = 1; i < length; ++i)
{
key = array[i];
for (int j = i - 1; j >= 0 && key < array[j]; --j)
{
array[j + 1] = array[j];
}
array[j + 1] = key;
}
}
二、选择排序
伪代码
SELECTION-SORT (A)
n = A.length
for j = 1 to n - 1
smallest = j
for i = j - 1 to n
if A[i] < A[smallest]
smallest = i
exchange A[j] with A[smallest]
代码
//selection sort
void selectionSort (int *array, int length)
{
int smallest, temp;
for (int i = 0; i < length - 1; ++i)
{
smallest = i;
for (int j = i + 1; j < length; ++j)
{
if (array[j] < array[smallest])
{
smallest = j;
}
}
temp = array[i];
array[i] = array[smallest];
array[smallest] = temp;
}
}
三、归并排序
void merge (int *array, int start, int middle, int end)
{
int i, j, k;
int n1 = middle - start + 1;
int n2 = end - middle;
// int *L = (int*)malloc(sizeof(int)*(n1 + 1));
// int *R = (int*)malloc(sizeof(int)*(n2 + 1));
int *L = new int[n1 + 1];
int *R = new int[n2 + 1];
for (i = 0; i < n1; ++i)
{
L[i] = array[start + i];
}
for (i = 0; i < n2; ++i)
{
R[i] = array[middle + i + 1];
}
L[n1] = INT_MAX;
R[n2] = INT_MAX;
i = 0;
j = 0;
for (k = start; k <= end; ++k)
{
if (L[i] < R[j])
{
array[k] = L[i];
++i;
}
else
{
array[k] = R[j];
++j;
}
}
delete [] L;
delete [] R;
}
//mergeSort
void mergeSort (int *array, int start, int end)
{
if (start < end)
{
int middle = (start + end) / 2;
mergeSort (array, start, middle);
mergeSort (array, middle + 1, end);
merge (array, start, middle, end);
}
}
四、 冒泡排序
void bubbleSort (int *array, int length)
{
for (int i = 0; i < length; ++i)
{
for (int j = length - 1; j > i; --j)
{
if (array[j - 1] > array[j])
{
int temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
}