思路:
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
对于包含n个元素的数组,需要进行n-1次操作:每操作一次,会找出一个较大元素往后移动。
而对于这n-1次操作,每次需要进行n-1-i次排序。
/*******************************************************
void bubble_sort(int *array, int len)
{
int i, j, tmp;
for(i = 0; i < len - 1; i++) //需要进行len - 1次操作。
{
for (j = 0; j < len - 1 -i; j++)
{
if (array[j] > array[j+1])
{
tmp = array[j+1];
array[j+1] = array[j];
array[j] = tmp;
}
}
}
}
********************************************************/
2.插入排序:
思路:
将数组看作两部分,一部分为已经排好序的,另一部分为待排序的,每次从待排序的序列中拿出一个去和前面已排序的部分逐一进行比较找出适当的位置插入并保证此部分仍然有序。
一般将数组第一个元素看做已经排序的,所以对于包含n个元素的数组来说,需要进行n-1次操作。
而每次操作需要拿待排序的元素和见面已经排序的元素依次比较。
/**********************************************************
void insert_sort(int *array, int len)
{
int i, j, tmp;
for (i = 1; i < len; i++)
{
tmp = array[i];
for (j = i; j > 0 && tmp < array[j-1]; j--)
array[j] = array[j-1];
array[j] = tmp;
}
}
***********************************************************/
3.快速排序
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
/*************************************************************************************
int adjust_array(int a[], int l, int r)
{
int pivot = a[l];
while (l < r)
{
while (l < r && a[r] >= pivot)
r--;
a[l] = a[r];
while (l < r && a[l] <= pivot)
l++;
a[r] = a[l];
}
a[l] = pivot;
return l;
}
void __quick_sort(int a[], int l, int r)
{
int pivotloc;
if (l >= r)
return;
pivotloc = adjust_array(a, l, r);
__quick_sort(a, l , pivotloc);
__quick_sort(a, pivotloc + 1, r);
}
*******************************************************/