您的位置:首页 > 其它

比较三个数大小

2017-07-15 22:44 190 查看
int a,b,c;

方法一

int max,median,min;
if(a>b){
if(b>c){
max=a;
median=b;
min=c;
} else {
min=b;
if(a>c){
max=a;
median=c;
} else {
max=c;
median=a;
}
}
} else {
if(b<c){
max=c;
median=b;
min=a;
} else {
max=b;
if(a>c){
median=a;
min=c;
}else{
median=c;
min=a;
}
}
}


方法二:从小到大

int t= -1;  // 只使用一个中间变量
if(a>b){
t=a;
a=b;
b=t;
}
if(a>c){
t=a;
a=c;
c=t;
}
if(b>c){
t=b;
b=c;
c=t;
}


方法三

自行写排序算法:冒泡/插入/选择/快速排序…….

方法四

使用类库,Arrays.sort(),内部根据数据项长度自动选择不同方式,具体实现为:

private static void sort1(int x[], int off, int len) {
// Insertion sort on smallest arrays
if (len < 7) {
for (int i=off; i<len+off; i++)
for (int j=i; j>off && x[j-1]>x[j]; j--)
swap(x, j, j-1);
return;
}

// Choose a partition element, v
int m = off + (len >> 1);       // Small arrays, middle element
if (len > 7) {
int l = off;
int n = off + len - 1;
if (len > 40) {        // Big arrays, pseudomedian of 9
int s = len/8;
l = med3(x, l,     l+s, l+2*s);
m = med3(x, m-s,   m,   m+s);
n = med3(x, n-2*s, n-s, n);
}
m = med3(x, l, m, n); // Mid-size, med of 3
}
int v = x[m];

// Establish Invariant: v* (<v)* (>v)* v*
int a = off, b = a, c = off + len - 1, d = c;
while(true) {
while (b <= c && x[b] <= v) {
if (x[b] == v)
swap(x, a++, b);
b++;
}
while (c >= b && x[c] >= v) {
if (x[c] == v)
swap(x, c, d--);
c--;
}
if (b > c)
break;
swap(x, b++, c--);
}

// Swap partition elements back to middle
int s, n = off + len;
s = Math.min(a-off, b-a  );  vecswap(x, off, b-s, s);
s = Math.min(d-c,   n-d-1);  vecswap(x, b,   n-s, s);

// Recursively sort non-partition-elements
if ((s = b-a) > 1)
sort1(x, off, s);
if ((s = d-c) > 1)
sort1(x, n-s, s);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: