基本排序算法的C语言实现
2006-08-30 14:16
381 查看
1、摘要
历次找工作,经常会被要求写排序算法,每次都写冒泡排序,而且每次都很心虚。不是因为怕写的不对,而是因为自己的数据结构、算法基本功不扎实。越来越觉得这些重要,不仅仅是理解原理那么简单,而是觉得应该自己能够随手实现它们,最少能够实现一个大概。
本文实现几种内排序。接下来会依次实现其他一些算法。
2、排序算法实现
这个页面介绍了排序是什么,以及简单提到了内排序和外排序的区别。而这篇文章则详细介绍了几种排序的思想,并给出了Pascal语言的实现。
常见内排序包括插入排序、冒泡排序、快速排序、直接选择排序、堆排序、希尔排序和归并排序等。其中快速排序则为这些排序中的大牌明星,其平均效率远低于其他排序方法。
下面列出几个排序算法的C语言实现,以便日后查阅。
l 冒泡排序
void bubblesort(int ori[], int len)
{
int i, j;
for (i = 0; i < len; i++)
{
for (j = 0; j < len - i - 1; j++)
{
if (ori[j] > ori[j + 1])
{
swap(&ori[j], &ori[j + 1]);
}
}
}
}
l 插入排序
void insertsort(int ori[], int len)
{
int i, j, tmp;
for (i = 1; i < len; i++)
{
tmp = ori[i];
j = i;
while (j > 0 && tmp < ori[j - 1])
{
ori[j] = ori[j - 1];
j--;
}
ori[j] = tmp;
}
}
l 直接选择排序
void selectsort(int ori[], int len)
{
int i, j, tmp;
for (i = 0; i < len; i++)
{
for (j = i + 1; j < len; j++)
{
if (ori[i] > ori[j])
{
swap(&ori[i], &ori[j]);
}
}
}
}
l 快速排序
快速排序稍微复杂一点,用到两个函数,其中getpivot函数的功能是获取支点元素,该元素从数组首尾以及中间位置的数中获取,获取规则是将这三个数排序,取中间值。需要注意的是这三个数被排序以后,最大的放在数组最后,最小的放在数组最前,而中间那个数则和倒数第二个数交换位置。
void quicksort(int data[], int start, int end)
{
int i, j, pivot;
if (start + 3 <= end)
{
pivot = getpivot(data, start, end);
i = start;
j = end - 1;
for ( ; ; )
{
while (data[++i] < pivot);
while (data[--j] > pivot);
if (i < j)
{
swap(&data[i], &data[j]);
}
else
break;
}
swap(&data[i], &data[end - 1]);
quicksort(data, start, i - 1);
quicksort(data, i + 1, end);
}
else
{
bubblesort(&data[start], end - start + 1);
}
}
static int getpivot(int data[], int start, int end)
{
int mid = (start + end) / 2;
data[start] > data[mid] ? swap(&data[start], &data[mid]) : NULL;
data[start] > data[end] ? swap(&data[start], &data[end]) : NULL;
data[mid] > data[end] ? swap(&data[mid], &data[end]) : NULL;
swap(&data[mid], &data[end - 1]);
return data[end - 1];
}
以上函数用到swap函数,用于交换两个数的值。
static void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
3、作者手记
作者:悠乐,青娱乐开发工程师。
4、更新日志
5、参考文档
6、相关文档
历次找工作,经常会被要求写排序算法,每次都写冒泡排序,而且每次都很心虚。不是因为怕写的不对,而是因为自己的数据结构、算法基本功不扎实。越来越觉得这些重要,不仅仅是理解原理那么简单,而是觉得应该自己能够随手实现它们,最少能够实现一个大概。
本文实现几种内排序。接下来会依次实现其他一些算法。
2、排序算法实现
这个页面介绍了排序是什么,以及简单提到了内排序和外排序的区别。而这篇文章则详细介绍了几种排序的思想,并给出了Pascal语言的实现。
常见内排序包括插入排序、冒泡排序、快速排序、直接选择排序、堆排序、希尔排序和归并排序等。其中快速排序则为这些排序中的大牌明星,其平均效率远低于其他排序方法。
下面列出几个排序算法的C语言实现,以便日后查阅。
l 冒泡排序
void bubblesort(int ori[], int len)
{
int i, j;
for (i = 0; i < len; i++)
{
for (j = 0; j < len - i - 1; j++)
{
if (ori[j] > ori[j + 1])
{
swap(&ori[j], &ori[j + 1]);
}
}
}
}
l 插入排序
void insertsort(int ori[], int len)
{
int i, j, tmp;
for (i = 1; i < len; i++)
{
tmp = ori[i];
j = i;
while (j > 0 && tmp < ori[j - 1])
{
ori[j] = ori[j - 1];
j--;
}
ori[j] = tmp;
}
}
l 直接选择排序
void selectsort(int ori[], int len)
{
int i, j, tmp;
for (i = 0; i < len; i++)
{
for (j = i + 1; j < len; j++)
{
if (ori[i] > ori[j])
{
swap(&ori[i], &ori[j]);
}
}
}
}
l 快速排序
快速排序稍微复杂一点,用到两个函数,其中getpivot函数的功能是获取支点元素,该元素从数组首尾以及中间位置的数中获取,获取规则是将这三个数排序,取中间值。需要注意的是这三个数被排序以后,最大的放在数组最后,最小的放在数组最前,而中间那个数则和倒数第二个数交换位置。
void quicksort(int data[], int start, int end)
{
int i, j, pivot;
if (start + 3 <= end)
{
pivot = getpivot(data, start, end);
i = start;
j = end - 1;
for ( ; ; )
{
while (data[++i] < pivot);
while (data[--j] > pivot);
if (i < j)
{
swap(&data[i], &data[j]);
}
else
break;
}
swap(&data[i], &data[end - 1]);
quicksort(data, start, i - 1);
quicksort(data, i + 1, end);
}
else
{
bubblesort(&data[start], end - start + 1);
}
}
static int getpivot(int data[], int start, int end)
{
int mid = (start + end) / 2;
data[start] > data[mid] ? swap(&data[start], &data[mid]) : NULL;
data[start] > data[end] ? swap(&data[start], &data[end]) : NULL;
data[mid] > data[end] ? swap(&data[mid], &data[end]) : NULL;
swap(&data[mid], &data[end - 1]);
return data[end - 1];
}
以上函数用到swap函数,用于交换两个数的值。
static void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
3、作者手记
作者:悠乐,青娱乐开发工程师。
4、更新日志
5、参考文档
6、相关文档
相关文章推荐
- 几个基本排序算法的代码实现(C语言)
- C语言基本排序算法之插入排序与直接选择排序实现方法
- 几种基本的排序算法(选择排序,冒泡排序,快速排序,归并排序,希尔排序)C语言实现
- 基本排序算法的C语言实现
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- 几个基本排序算法总结( C语言实现 )
- 算法学习入门之使用C语言实现各大基本的排序算法
- Python实现基本排序算法01
- 排序算法,基本的高级语言都有一些提供。C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(不是Array)。用这些排序时,都可以写自己的排序规则。
- Java 实现基本的排序算法
- 递归实现归并排序(基本排序算法)
- 用java实现3种基本的排序算法
- 用Python实现基本排序算法01——冒泡排序
- PHP实现四种基本排序算法
- PHP实现四种基本排序算法
- 顺序表的基本操作(C语言实现)
- 用Python实现基本排序算法02——选择排序
- 排序算法(c语言实现)
- C语言实现printf的基本格式输出%d,%c,%p,%s
- 排序算法的基本思想和OC代码实现