なぜこれが私にとってそれほど難しくなっているのかはわかりませんが、私は高から低、低から高に並べ替える必要があります。
高から低へ:
int a, b;
int temp;
int sortTheNumbers = len - 1;
for (a = 0; a < sortTheNumbers; ++a) {
for (b = 0; b < sortTheNumbers; ++b) {
if (array[b] < array[b + 1]) {
temp = array[b];
array[b] = array[b + 1];
array[b + 1] = temp;
}
}
}
しかし、私は人生の中でそれを逆(低から高)で動作させることはできません、私はロジックを完全に考え、すべての値に対して常に0を返します。助けてくれてありがとう!
より大きな画像は、私が4列のJTableを持ち、各列に数値、名前、または日付のエントリがあることです。それらを前後に分類できる必要があります。
ありがとう!
すでに利用可能なソート関数とオートボクシングの使用が不正行為だと思わない限り:
Integer[] arr =
{ 12, 67, 1, 34, 9, 78, 6, 31 };
Arrays.sort(arr, new Comparator<Integer>()
{
@Override
public int compare(Integer x, Integer y)
{
return x - y;
}
});
System.out.println("low to high:" + Arrays.toString(arr));
プリントlow to high:[1, 6, 9, 12, 31, 34, 67, 78]
高から低への変更が必要な場合x-y
からy-x
コンパレータ
配列の最後の要素にアクセスすることはありません。
また、 bubble sort はかなり非効率的であり、Arrays.sort()
を使用するだけでよいことに注意してください。
public class sorting {
public static void main(String arg[])throws Exception{
int j[]={1,28,3,4,2}; //declaring array with disordered values
for(int s=0;s<=j.length-1;s++){
for(int k=0;k<=j.length-2;k++){
if(j[k]>j[k+1]){ //comparing array values
int temp=0;
temp=j[k]; //storing value of array in temp variable
j[k]=j[k+1]; //swaping values
j[k+1]=temp; //now storing temp value in array
} //end if block
} // end inner loop
}
//end outer loop
for(int s=0;s<=j.length-1;s++){
System.out.println(j[s]); //retrieving values of array in ascending order
}
}
}
one string Arrays.sort(arr)
for low to high for Java 8。
Arrays.sort(arr, Collections.reverseOrder())
for 高から低
並べ替え順序を変更するために必要なのは変更だけです
if (array[b] < array[b + 1])
に
if (array[b] > array[b + 1])
他の人が指摘したように、それは非常に非効率的です! :-)
Java8では、次のようなことができます。
temp.stream()
.sorted((e1, e2) -> Integer.compare(e2, e1))
.forEach(e -> System.out.println(e));
Int配列を並べ替えるだけの場合:クイックソートを使用します...コードは多くなく、平均でN * lgN、最悪の場合N ^ 2です。複数のデータをソートするには、Java Compare(上記のように)または安定したソートアルゴリズムを使用します
static void quicksort(int[] a,int l, int r){
if(r <= l) return;
int pivot = partition(a,l,r);
//Improvement, sort the smallest part first
if((pivot-l) < (r-pivot)){
quicksort(a,l,pivot-1);
quicksort(a,pivot+1,r);
}else{
quicksort(a,pivot+1,r);
quicksort(a,l,pivot-1);
}
}
static int partition(int[] a,int l,int r){
int i = l-1;
int j = r;
int v = a[r];
while(true){
while(less(a[++i],v)); //-> until bigger
while((less(v,a[--j]) && (j != i))); //-> until smaller and not end
if(i >= j){
break;
}
exch(a,i,j);
}
exch(a,i,r);
return i;
}
Arrays.sortを使用せずに、これまでと同じロジックを適用する場合は、次の方法が役立ちます
int[] intArr = {5, 4, 3, 8, 9, 11, 3, 2, 9, 8, 7, 1, 22, 15, 67, 4, 17, 54};
//Low to high
for(int j=0; j<intArr.length-1; j++){
for(int i=0; i<intArr.length-1; i++){
if (intArr[i] > intArr[i+1]){
int temp = intArr[i+1];
intArr[i+1] = intArr[i];
intArr[i] = temp;
}
}
}
//High to low
for(int j=0; j<intArr.length-1; j++){
for(int i=0; i<intArr.length-1; i++){
if (intArr[i] < intArr[i+1]){
int temp = intArr[i+1];
intArr[i+1] = intArr[i];
intArr[i] = temp;
}
}
}
for(int ars : intArr){
System.out.print(ars+",");
}
より効率的なソートが必要です。マージソートのように。 www.geekviewpoint.comを試して、並べ替えに移動してください