排序算法
来源:互联网 发布:自动化软件开发工程师 编辑:程序博客网 时间:2024/06/10 08:56
1. 选择排序: 有i个元素,每一趟从i-1个待拍元素中选出关键字最小的元素,作为有序元素的第i个元素
例如:
#include <stdio.h>
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void selectsort(int *a, int len)
{
int i,j;
int min = -1;
for(i = 0; i < len; i++)
{
min = i;
for(j = i; j < len; j++)
{
if(a[j] < a[min])
min = j;
}
swap(&a[i], &a[min]);
}
}
void show(int *a, int len)
{
int i;
for(i = 0; i < len; i++)
{
printf("%d\t", a[i]);
}
printf("\n");
}
int main(void)
{
int a[6] = {1,4,2,6,2,7};
show(a, 6);
sort(a, 6);
show(a, 6);
return 0;
}
2. 插入排序:
分为有序区和无序区,将无序区中的第一个数在有序区中找到对应的位置插入,原来有序区中的数向后移动
例如:
void insertsort(int *a, int len)
{
int i,j;
int temp;
int k = -1;
for(i = 1; i < len; i++)
{
k = i;
temp = a[k];
for(j = i-1; (j >= 0)&&(a[j]>temp); j--)
{
a[j+1] = a[j];
k = j;
}
a[k] = temp;
}
}
3.希尔排序:
将待排序列分为若干组,在每一组中进行插入排序,使整个序列基本有序,最后对整个序列进行插入排序
例如:
void Shellsort(int *a, int len)
{
int i,j;
int k = -1;
int garb = len;
int temp;
do{
garb = garb/3 + 1;
for(i = garb; i < len; i += garb)
{
k = i;
temp = a[k];
for(j = i-garb; (j >= 0)&&(temp < a[j]); j -= garb)
{
a[j+garb] = a[j];
k = j;
}
a[k] = temp;
}
}while(garb > 1);
}
4. 冒泡法排序
每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换
对冒泡排序常见的改进方法是加入一标志性变量exchange,用于标志某一趟排序过程中是否有数据交换,如果
进行某一趟排序时并没有进行数据交换,则说明数据已经按要求排列好,可立即结束排序,避免不必要的比较过程。
例如:
void Bubblesort(int *a, int len)
{
int i,j;
int exchange = 1;
for(i = 0; (i < len)&&exchange; i++)
{
exchange = 0;
for(j = len-1; j > i; j--)
{
if(a[j] < a[j-1])
{
swap(&a[j], &a[j-1]);
exchange = 1;
}
}
}
}
5.快速排序:
(1)一般将第一个元素作为基准元素,将待排序列分为两个序列,左边的元素都小于基准元素,右边的元素都大于基准元素
(2)分别对上述两个序列重复进行(1)中的方法。
例如:
int partition(int *a, int low, int high) //找出基准元素的位置
{
int temp = a[low];
while(high > low)
{
while((high > low)&&(a[high]>=temp))
high--;
swap(&a[low], &a[high]);
while((high > low)&&(a[low]<=temp))
low++;
swap(&a[low], &a[high]);
}
return low;
}
void Quicksort(int* a, int low, int high)
{
if(low < high)
{
int index = partition(a,low,high);
Quicksort(a,low,index-1);
Quicksort(a,index+1,high);
}
}
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- LeetCode 64
- char 判断字符是否为大小写
- HTTPOXY漏洞说明
- H264 NAL_AUD
- mybatis源码解析
- 排序算法
- 练习 8:更多的重定向和过滤:head,tail,awk,grep,sed
- 基于PHP+redis的秒杀系统
- 关于网络协议的一点学习
- Activity的生命周期
- HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
- 从零开始用android studio
- krpano的调试
- ListView CheckBox多选