2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -0,0 +1,39 @@
|
|||
#include <stdio.h>
|
||||
|
||||
// can be any swap function. This swap is optimized for numbers.
|
||||
void swap(int *x, int *y) {
|
||||
if(x == y)
|
||||
return;
|
||||
*x ^= *y;
|
||||
*y ^= *x;
|
||||
*x ^= *y;
|
||||
}
|
||||
void cocktailsort(int *a, size_t n) {
|
||||
while(1) {
|
||||
// packing two similar loops into one
|
||||
char flag;
|
||||
size_t start[2] = {1, n - 1},
|
||||
end[2] = {n, 0},
|
||||
inc[2] = {1, -1};
|
||||
for(int it = 0; it < 2; ++it) {
|
||||
flag = 1;
|
||||
for(int i = start[it]; i != end[it]; i += inc[it])
|
||||
if(a[i - 1] > a[i]) {
|
||||
swap(a + i - 1, a + i);
|
||||
flag = 0;
|
||||
}
|
||||
if(flag)
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
int a[] = { 5, -1, 101, -4, 0, 1, 8, 6, 2, 3 };
|
||||
size_t n = sizeof(a)/sizeof(a[0]);
|
||||
|
||||
cocktailsort(a, n);
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
printf("%d ", a[i]);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
-4 -1 0 1 2 3 5 6 8 101
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#define try_swap { if (a[i] < a[i - 1])\
|
||||
{ t = a[i]; a[i] = a[i - 1]; a[i - 1] = t; t = 0;} }
|
||||
|
||||
void cocktailsort(int *a, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
int t = 0;
|
||||
while (!t) {
|
||||
for (i = 1, t = 1; i < len; i++) try_swap;
|
||||
if (t) break;
|
||||
for (i = len - 1, t = 1; i; i--) try_swap;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int x[] = { 5, -1, 101, -4, 0, 1, 8, 6, 2, 3 };
|
||||
size_t i, len = sizeof(x)/sizeof(x[0]);
|
||||
|
||||
cocktailsort(x, len);
|
||||
for (i = 0; i < len; i++)
|
||||
printf("%d\n", x[i]);
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue