排序算法之鸡尾酒排序

    xiaoxiao2026-05-27  10

    鸡尾酒排序

         鸡尾酒排序实际上是一种双向的冒泡排序。第一趟,从0开始到size-1前往后做“冒泡”,将最大值移动到最后(下标为size-1)。第二趟,从size-2开始到0从后往前做“冒泡”,将最小值移动到最前面(下标为0)。第三趟,从1开始到size-2从前往后做“冒泡”,将最大值移动到最后(下标为size-2)。第四趟,从size-3开始到1从后往前做“冒泡”,将最小值移动到最前面(下标为1)。按照这样的顺序依次执行,到排序过程中没有进行交换操作为止。      例如对序列{8, 3, 6, 1, 9, 5, 4}做鸡尾酒排序。第一趟从前往后,结果为{3, 6, 1, 8, 5, 4, 9}。第二趟从后往前,结果为{1, 3, 6, 4, 8, 5, 9}。第四趟从前往后,结果为{1, 3, 4, 6, 5, 8, 9}。第五趟从后往前,结果为{1, 3, 4, 5, 6, 8, 9}。第六趟从前往后,由于没有进行交换操作,所以排序完毕。最终结果为{1, 3, 4, 5, 6, 8, 9}

    #define TRUE 1 #define FALSE 0 typedef int datatype; typedef int BOOL; BOOL CocktailSort(datatype *array, int size) { int i, j; int tag; if(array == NULL) { return FALSE; } //开始排序 for(i = 0; i <= size / 2; i++) { tag = TRUE; //从前往后,选出最大值放在这一趟的最后 for(j = i; j < size-i-1; j++) { if(array[j] > array[j+1]) { Swap(array+j, array+j+1); tag = FALSE; } } if(tag) { return TRUE; } //从后往前,选出最小值放在这一趟的最前面 for(j = j-1; j > i; j--) { if(array[j] < array[j-1]) { Swap(array+j, array+j-1); tag = FALSE; } } if(tag) { return TRUE; } } return TRUE; } 相关资源:python入门教程(PDF版)
    最新回复(0)