1 选择法
#include <stdio.h>
#include <stdlib.h>
void selectionSort(int *array, int len)
{
int min = 0;
for (int i = 0; i < len - 1; ++i)
{
min = i;
for (int j = i + 1; j < len; ++j)
{
if (array[min] > array[j])
{
min = j;
}
}
if (min != i)
{
int tmp = array[min];
array[min] = array[i];
array[i] = tmp;
}
}
}
#if 0
void main()
{
int i;
int array[] = { 12, 5, 33, 6, 10 };
int len = sizeof(array) / sizeof(int);
printf("待排序数组序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
selectionSort(array, len);
printf("选择排序之后的序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
system("pause");
}
#endif
2 插入排序
#include <stdio.h>
#include <stdlib.h>
void insertionSort(int *array, int len)
{
int tmp = 0;
int index = 0;
for (int i = 1; i < len; ++i)
{
index = i;
tmp = array[i];
for (int j = i - 1; j >= 0; --j)
{
if (tmp < array[j])
{
array[j + 1] = array[j];
index = j;
}
else
{
break;
}
}
array[index] = tmp;
}
}
#if 0
void main()
{
int i;
int array[] = { 12, 5, 33, 6, 10 };
int len = sizeof(array) / sizeof(int);
printf("待排序数组序列: ");
for (int i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
insertionSort(array, len);
printf("插入排序之后的序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
system("pause");
}
#endif
3 冒泡法
#include <stdio.h>
#include <stdlib.h>
void bubbleSort(int *array, int len)
{
#if 0
for (int i= 0; i < len; ++i)
{
for (int j = 1; j < len - i; j++)
{
if (array[j] < array[j - 1])
{
int tmp = array[j];
array[j] = array[j - 1];
array[j - 1] = tmp;
}
}
}
#endif
int flag = 0;
for (int i = len - 1; i > 0 && flag==0; --i)
{
flag = 1;
for (int j = 0; j < i; ++j)
{
if (array[j] > array[j + 1])
{
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
flag = 0;
}
}
}
}
#if 0
void main()
{
int i;
int array[] = { 11, 8, 7, 6, 3 };
int len = sizeof(array) / sizeof(int);
printf("待排序数组序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
bubbleSort(array, len);
printf("冒泡排序之后的序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
system("pause");
}
#endif
4 希尔排序
#include <stdio.h>
#include <stdlib.h>
void shellSort(int *array, int len)
{
int gap = len;
while (gap > 1)
{
gap = gap / 3 + 1;
for (int i = 0; i < gap; ++i)
{
int tmp;
int index;
for (int j = i + gap; j < len; j += gap)
{
tmp = array[j];
index = j;
for (int k = j - gap; k >= 0; k -= gap)
{
if (tmp < array[k])
{
array[k + gap] = array[k];
index = k;
}
else
{
break;
}
}
array[index] = tmp;
}
}
}
}
#if 0
void main()
{
int i;
int array[] = { 12, 5, 33, 6, 10 };
int len = sizeof(array) / sizeof(int);
printf("待排序数组序列: ");
for (int i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
shellSort(array, len);
printf("希尔排序之后的序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
system("pause");
}
#endif
5 快速排序
#include <stdio.h>
#include <stdlib.h>
void quickSort(int s[], int l, int r)
{
if (l < r)
{
int i = l, j = r;
int x = s[l];
while (i < j)
{
while (i < j && s[j] >= x)
{
j--;
}
if (i < j)
{
s[i++] = s[j];
}
while (i < j && s[i] < x)
{
i++;
}
if (i < j)
{
s[j--] = s[i];
}
}
s[i] = x;
quickSort(s, l, i - 1);
quickSort(s, i + 1, r);
}
}
#if 0
void main()
{
int i;
int array[] = { 12, 5, 33, 6, 10 };
int len = sizeof(array) / sizeof(int);
printf("待排序数组序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
quickSort(array, 0, len-1);
printf("快速排序之后的序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
system("pause");
}
#endif
6 归并排序
#include <stdio.h>
#include <stdlib.h>
void quickSort(int s[], int l, int r)
{
if (l < r)
{
int i = l, j = r;
int x = s[l];
while (i < j)
{
while (i < j && s[j] >= x)
{
j--;
}
if (i < j)
{
s[i++] = s[j];
}
while (i < j && s[i] < x)
{
i++;
}
if (i < j)
{
s[j--] = s[i];
}
}
s[i] = x;
quickSort(s, l, i - 1);
quickSort(s, i + 1, r);
}
}
#if 0
void main()
{
int i;
int array[] = { 12, 5, 33, 6, 10 };
int len = sizeof(array) / sizeof(int);
printf("待排序数组序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
quickSort(array, 0, len-1);
printf("快速排序之后的序列: ");
for (i = 0; i < len; ++i)
{
printf("%d\t", array[i]);
}
printf("\n");
system("pause");
}
#endif
7 算法比较