voidcocktailSort(int a[], int n){ int left = 1, right = n; while (left < right) { /*前半轮,将最大元素放到后面*/ for (int i = left; i < right; i++) if(a[i] > a[i+1]) swap(a[i], a[i+1]); right--; /*后半轮,将最小元素放到前面*/ for (int i = right; i > left; i--) if(a[i-1] > a[i]) swap(a[i], a[i-1]); left++; } }
voidcocktailSort(int a[], int n){ int left = 1, right = n; while (left < right) { bool flag = false; //判断是否有交换 /*前半轮,将最大元素放到后面*/ for (int i = left; i < right; i++) { if(a[i] > a[i+1]) { swap(a[i], a[i+1]); flag = true; //有交换说明仍需排序 } } right--; if (!flag) //若本趟无交换,说明表已经有序,终止 break; /*后半轮,将最小元素放到前面*/ for (int i = right; i > left; i--) { if(a[i-1] > a[i]) { swap(a[i], a[i-1]); flag = true; //有交换说明仍需排序 } } left++; if (!flag) //若本趟无交换,说明表已经有序,终止 break; } }