وهذه محاولة لجعل الترتيب بالتبادل كما في القوائم الخاصة بالإيميل حيث عندما تضغط على عامود المرسل يرتب القائمة تصاعديا، وعندما تضغط على نفس العامود مرة أخرى يرتبه تنازليا
كود
public class SortedArray {
private int[] data;
private int sorting; //0 for asserting and 1 for desserting
public static final int ASSERTING = 0;
public static final int DESSERTING = 1;
public SortedArray(int[] data) {
this.data = data;
this.sorting = -1;
}
public SortedArray bubbleSort() {
switchSorting();
int i, j;
for (i = 0; i < data.length - 1; i++) {
for (j = data.length - 1; j > i; j--) {
if ((sorting==DESSERTING) && data[j] > data[j - 1]) {
swap(j, j - 1);
} else if ((sorting==ASSERTING) && data[j] < data[j - 1]) {
swap(j, j - 1);
}
}
}
return this;
}
public SortedArray bubbleSort(int sorting) {
if(sorting==ASSERTING||sorting==DESSERTING){
this.sorting = sorting;
switchSorting();
return bubbleSort();
}
return this;
}
private void switchSorting() {
if(sorting==ASSERTING){
sorting=DESSERTING;
}
else if(sorting==DESSERTING){
sorting =ASSERTING;
}
else{
sorting=ASSERTING;
}
}
private void swap(int j, int i) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
private void printArray() {
if(sorting==-1){
System.out.println("Array is not sorted yet:");
}
else{
System.out.println("Sorting is " + (sorting==ASSERTING?"Asserting":"Desserting"));
}
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]);
}
System.out.println();
}
public static void main(String[] args) {
SortedArray sortedArray = new SortedArray(new int[] { 2, 4, 5, 9, 1 });
sortedArray.printArray();
sortedArray.bubbleSort().printArray();
sortedArray.bubbleSort().printArray();
sortedArray.bubbleSort(DESSERTING).printArray();
sortedArray.bubbleSort(ASSERTING).printArray();
sortedArray.bubbleSort().printArray();
}
}
أرجو أن يكون الكود واضحا وأي سؤال في الخدمة