您的位置:首页 > 其它

四种常见排序算法总结

2015-09-14 17:19 302 查看
一.冒泡排序

排序过程:

比较相邻的两个数据,如果第二个数小,就交换位置。
从前向后两两比较,一直到比较最后两个数据。最终最大数被交换到最后的位置,这样第一个最大数的位置就排好了。
继续重复上述过程,依次将第2.3...n-1个最大数排好位置。

/*************************************************************************
> File Name: maopao.c
> Author: bairutai
> Mail: bairutai@aliyun.com
> Created Time: 2015年09月14日 星期一 09时28分07秒
************************************************************************/

#include<stdio.h>
main()
{
int array[] = {
8,2,4,5,7,9,1,10,0,3,6
};
int i,j,tmp;
int len = sizeof(array)/4;
for(i = 0; i < len; i++){
for(j = 0; j < len -i-1; j++){
if(array[j] > array[j+1]){
tmp = array[j+1];
array[j+1] = array[j];
array[j] = tmp;
}
}
}
for(i = 0; i < len; i++){
printf("array[%d] is %d \n", i, array[i]);
}
}

二.选择排序
排序过程:

              在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;

              第二次遍历n-2个数,找到最小的数值与第二个元素交换;

               。。。

              第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。

/*************************************************************************
> File Name: xuanze.c
> Author: bairutai
> Mail: bairutai@aliyun.com
> Created Time: 2015年09月14日 星期一 11时53分24秒
************************************************************************/

#include<stdio.h>
main(){
int array[] = {
8,2,4,5,7,9,1,10,0,3,6
};
int len = sizeof(array)/sizeof(int);
int i,j,tmp,min;
for(i = 0; i < len; i++){
min = i;
for(j = i+1; j < len;j++){
if(array[j]<array[min]){
min = j;
}
}
if(min != i){
tmp = array[min];
array[min] = array[i];
array[i] = tmp;
}
}
for(i = 0;i<len;i++){
printf("array[%d] is %d\n", i,array[i]);
}

}
三.插入排序

排序过程:

在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

/*************************************************************************
> File Name: charu.c
> Author: bairutai
> Mail: bairutai@aliyun.com
> Created Time: 2015年09月14日 星期一 13时59分56秒
************************************************************************/

#include<stdio.h>
main()
{
int array[] = {
10,9,8,7,6,5,4,3,2,1,0
};
int len = sizeof(array)/sizeof(int);
int tmp,i,j;
for(i=0;i<len-1;i++){
for(j=i+1;j>0;j--){
if(array[j]<array[j-1]){
tmp = array[j-1];
array[j-1] = array[j];
array[j] = tmp;
}
else
{
break;
}
}
}

for(i=0;i<len;i++){
printf("array[%d] is %d\n",i,array[i]);
}
}
四.快速排序

排序过程参考:排序过程理解

/*************************************************************************
> File Name: kuaisu.c
> Author: bairutai
> Mail: bairutai@aliyun.com
> Created Time: 2015年09月14日 星期一 14时09分37秒
************************************************************************/

#include<stdio.h>
void Sort(int [],int, int);
main()
{
int array[] = {
10,9,8,7,6,5,4,3,2,1,0
};
int len = sizeof(array)/sizeof(int);
Sort(array, 0, len-1);
int i;
for(i = 0;i<len;i++)
{
printf("array[%d] is %d\n", i, array[i]);
}
}

void Sort(int array[], int begin,int end)
{
if(end <= begin){
return;
}
int i = begin;
int j = end;
int key = array[begin];
while(i<j){
while(i<j && array[j] >= key){
j--;
}
if(i<j){
array[i] = array[j];
i++;
}
while(i<j && array[i] < key){
i++;
}
if(i<j){
array[j] = array[i];
j--;
}
}
array[i] = key;
Sort(array,begin,i-1);
Sort(array,i+1,end);
}

其他排序没有研究贴一下链接:排序算法总结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: