加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

鸡尾酒排序Linux下C 达成

发布时间:2021-11-22 13:38:19 所属栏目:教程 来源:互联网
导读:很久很久以前,曾经写了篇文章:冒泡排序 Linux下C 实现 ,这次再show个冒泡排序的变种:鸡尾酒排序。 鸡尾酒排序在排序时,从两个方向在序列中排序。先找到最大的数字放到最后一位,然后找到最小的数字,放到第一位;然后再找到第二大的数字放到倒数第二位

很久很久以前,曾经写了篇文章:冒泡排序 Linux下C 实现 ,这次再show个冒泡排序的变种:鸡尾酒排序。 鸡尾酒排序在排序时,从两个方向在序列中排序。先找到最大的数字放到最后一位,然后找到最小的数字,放到第一位;然后再找到第二大的数字放到倒数第二位,再找到第二小的数字放到第二位。以此类推,直到完成排序。详细实现,请参阅下面的关键代码:
 
1、排序头文件:cocktailSort.h
 
#ifndef COCKTAILSORT_H   
#define COCKTAILSORT_H   
#include<stdbool.h>   
extern void cocktailSort(int * pArr, int length);  
#endif  
2、排序源文件:cocktailSort.c
#include "cocktailSort.h"  
void cocktailSort(int * pArr, int length)  
{  
        int bottom = 0;  
        int top = length-1;  
        bool swapped = true;  
        int tmp,i;  
        while(swapped)  
        {  
                swapped = false;  
                for(i=bottom; i<top; i++)  
                {  
                        if(*(pArr+i)>*(pArr+i+1))  
                        {  
                                swapped =true;  
                                tmp = *(pArr+i);  
                                *(pArr+i)=*(pArr+i+1);  
                                *(pArr+i+1)=tmp;  
                        }  
                }  
                top--;  
                for(i=top; i>bottom; i--)  
                {  
                        if(*(pArr+i)<*(pArr+i-1))  
                        {  
                                swapped = true;  
                                tmp = *(pArr+i);  
                                *(pArr+i)=*(pArr+i-1);  
                                *(pArr+i-1)=tmp;  
                        }  
                }  
                bottom++;  
        }  
}  
3、main函数头文件:main.h
#ifndef MAIN_H   
#define MAIN_H   
#include<stdio.h>   
#include "cocktailSort.h"   
extern void outputArr(const int *pArr, int lenght);  
extern int main(void);  
#endif  
3、main函数源文件:main.c
#include "main.h"   
int main(void)  
{  
        printf("input array length:n");  
        int length;  
        scanf("%d", &length);  
        if(length<0)  
        {  
                printf("array length must be larger 0n");  
                return 1;  
        }  
        printf("array lenght is %d n", length);  
  
        int arr[length];// ={1, 3, 6,5, 4};   
        int i=0;  
        for(i=0;i<length;i++)  
        {  
                printf("input arr[%d] valuen",i);  
                scanf("%d", &arr[i]);  
        }  
  
        printf("orig array:");  
        outputArr(arr, length);  
        cocktailSort(arr,length);  
  
        printf("cocktail sort array:");  
        outputArr(arr, length);  
        return 0;  
}  
void outputArr(const int *pArr, int length)  
{  
        int i;  
        for(i=0;i<length;i++)  
        {  
                printf(" %d",*(pArr+i));  
        }  
        printf("n");  
}  
4、Makefile文件:Makefile
all: main  
main: main.o cocktailSort.o   
        gcc -o main main.o cocktailSort.o  
main.o: main.c cocktailSort.c cocktailSort.h   
        gcc -c main.c  
cocktailSort.o: cocktailSort.c cocktailSort.h  
        gcc -c cocktailSort.c  
clean:  
        @echo "start cleaning"  
        -rm main *.o  
        @echo "clean completed"   
.PHONY: clean  
5、编译
make  
如果不出意外,可以看到可执行文件main。然后执行可执行文件,如下所示:
 
[root@localhost sort]$ ./main   
input array length:  
5  
array lenght is 5   
input arr[0] value  
34  
input arr[1] value  
67  
input arr[2] value  
89  
input arr[3] value  
4  
input arr[4] value  
3  
orig array: 34 67 89 4 3  
cocktail sort array: 3 4 34 67 89  

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读