算法步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的 数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
C语言实现:
#include <stdio.h>
void bubble_sort( int arr[], int len)
{
int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++){
if (arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
int main(void)
{
int arr[] = { 2, 4, 1, 0, 3, 8, 9, 7, 6, 5};
int len = sizeof(arr) / sizeof(*arr);
int i;
bubble_sort(arr, len);
for (i = 0;i < len - 1;i++)
printf("%d ",arr[i]);
return 0;
}
算法步骤
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
C语言实现:
#include <stdio.h>
void selection_sort( int arr[], int len)
{
int i,j;
for (i = 0;i < len - 1; i++){
int min = i;
for (j = i + 1; j < len - 1; j++){
if (arr[min] > arr[j])
min = j;
}
swap(&arr[min], &arr[i]);
}
}
void swap( int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main( void)
{
int arr[] = { 2, 4, 1, 0, 3, 8, 9, 7, 6, 5};
int len = sizeof(arr) / sizeof(*arr);
int i;
selection_sort( arr, len);
for (i = 0;i < len - 1; i++)
printf("%d ",arr[i]);
return 0;
}
算法步骤
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有 序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
C语言实现:
#include <stdio.h>
void insertion_sort( int arr[], int len)
{
int i, j, key;
for (i = 0; i < len; i++){
key = arr[i];
j = i - 1;
while ((j >= 0) && (arr[j] > key)){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
}
int main( void)
{
int arr[] = { 2, 4, 1, 0, 3, 8, 9, 7, 6, 5};
int len = sizeof(arr) / sizeof(*arr);
int i;
insertion_sort( arr, len);
for (i = 0;i < len - 1; i++)
printf("%d ",arr[i]);
return 0;
}
算法步骤
从数列中挑出一个元素,称为 “基准”(pivot)。
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的 数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操 作。
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
#include <stdio.h>
void quick_sort(int array[],int left,int right)
{
int i = left,j = right;
int temp;
int pivot;
pivot = array[(left + right) / 2];
while (i <= j)
{
while (array[i] < pivot)
{
i++;
}
while (array[j] > pivot)
{
j--;
}
if (i <= j)
{
temp = array [i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}
if (left < j)
{
quick_sort(array,left,j);
}
if (i < right)
{
quick_sort(array,i,right);
}
}
int main(void)
{
int array[] = {73,108,111,118,101,70,105,115,104,67,46,99,111,109};
int i,length;
length = sizeof(array) / sizeof (array[0]);
quick_sort(array,0,length-1);
for (i = 0;i < length;i++)
{
printf("%d ",array[i]);
}
return 0;
}