鸡尾酒排序Linux下C 实现
鸡尾酒排序Linux下C 实现
很久很久以前,曾经写了篇文章:冒泡排序 Linux下C 实现 ,这次再show个冒泡排序的变种:鸡尾酒排序。 鸡尾酒排序在排序时,从两个方向在序列中排序。先找到最大的数字放到最后一位,然后找到最小的数字,放到第一位;然后再找到第二大的数字放到倒数第二位,再找到第二小的数字放到第二位。以此类推,直到完成排序。详细实现,请参阅下面的关键代码:
1、排序头文件:cocktailSort.h
- #ifndef COCKTAILSORT_H
- #define COCKTAILSORT_H
- #include<stdbool.h>
- extern void cocktailSort(int * pArr, int length);
- #endif
- #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++;
- }
- }
- #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
- #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 0\n");
- 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] value\n",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");
- }
- 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
- 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
评论暂时关闭