カクテルソートアルゴリズム


カクテルソート、すなわち指向性発泡ソート、カクテル攪拌ソート、攪拌ソート(選択ソートの一種としても考えられる)、さざ波ソート、往復ソートorハッピータイムソートは、発泡ソートの一種の変形である.このアルゴリズムがバブルソートと異なるのは、ソート時に双方向にシーケンス内でソートされることである.
#include<stdio.h>    
#include<string.h>   
#include<math.h>   
#include<ctype.h>   
#include<stdbool.h>  

void swap(int *a, int *b)   //       
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
}

void printArray(int a[], int count)   //      
{
    int i;
    for(i=0; i<count; i++)
        printf("%d ",a[i]);
    printf("
"); } void cocktail_sort(int a[], int size){ // 0 int i,bottom = 0; int top = size - 1; bool swapped = true; while(swapped) // , { swapped = false; for(i = bottom; i < top; i++) { if(a[i] > a[i + 1]) // { swap(&a[i], &a[i + 1]); // swapped = true; } } // top = top - 1; for(i = top; i > bottom; i--) { if(a[i] < a[i - 1]) { swap(&a[i], &a[i - 1]); swapped = true; } } // bottom = bottom + 1; } } int main(void) { int a[]={3, 5, 4, 6, 9, 7, 8, 0, 1}; int n=sizeof(a)/sizeof(*a); printArray(a,n); cocktail_sort(a,n); printArray(a,n); return 0; }