2015-09-17 23 views
5

Tôi đang cố gắng viết loại lựa chọn này từ cao xuống thấp và tôi không chắc chắn cách thực hiện điều đó. Tôi khá mới để sắp xếp các thuật toán.Cách đảo ngược lựa chọn sắp xếp

public void selectionSort(String[ ] data){ 
    // for each position, from 0 up, find the next smallest item 
    // and swap it into place 
    for (int place=0; place<data.length-1; place++){ 
     int minIndex = place; 
     for (int sweep=place+1; sweep<data.length; sweep++){ 
      if (data[sweep].compareTo(data[minIndex]) < 0) 
       minIndex=sweep; 
     } 
     swap(data, place, minIndex); 
    } 
} 

Lý do tại sao tôi đang cố gắng để thay đổi nó là sắp xếp chọn ở đây chạy qua phần còn lại của mảng, tìm giá trị nhỏ nhất và sau đó hoán đổi nó vào front.I muốn thay đổi thuật toán để nó cũng tìm giá trị tối đa trong phần còn lại, và hoán đổi nó ở mặt sau, sao cho nó xây dựng một danh sách được sắp xếp từ phía trước và mặt sau cùng một lúc.

Tất cả các trợ giúp sẽ được đánh giá cao :)

+1

những gì bạn nghĩa là gì? Thứ tự giảm dần? –

+0

@SleimanJneidi yeah, thứ tự giảm dần –

+2

Tôi tin rằng chỉ thay đổi - 'if (data [sweep] .compareTo (dữ liệu [minIndex])> 0)' –

Trả lời

2

Bạn chỉ cần phủ nhận phương pháp compareTo

if(data[sweep].compareTo(data[minIndex]) > 0) 
    minIndex=sweep; 
+0

vì vậy nó không phải cái gì để làm với forloops? –

+0

Không, mọi thứ vẫn giữ nguyên, nhưng thay vì lớn hơn bạn sử dụng ít hơn –

+0

do đó vấn đề tôi đang cố gắng giải thích ở đây là thuật toán chuẩn chạy qua phần còn lại của mảng, tìm giá trị tối thiểu và sau đó hoán đổi nó ở phía trước. Thay đổi thuật toán để nó cũng tìm giá trị lớn nhất trong phần còn lại, và hoán đổi nó ở phía sau, sao cho nó xây dựng một danh sách được sắp xếp từ phía trước và mặt sau cùng một lúc. Phương pháp này có làm được điều này không? @SleimanJneidi –

2

Một chọn loại tìm ra mục còn lại nhỏ nhất trong mỗi lần lặp và đặt ở đúng nơi. Thay vào đó, bạn muốn tìm mục còn lại lớn nhất. Cách đơn giản nhất để làm điều này là chỉ cần lật điều kiện lựa chọn. Thay vì:

if (data[sweep].compareTo(data[minIndex]) < 0) 

Bạn nên sử dụng:

if (data[sweep].compareTo(data[minIndex]) > 0) 
+0

Oh okay, tôi đã thử nó và tôi nghĩ rằng nó hoạt động. Liệu nó có làm cho nó sắp xếp chậm hơn một tập hợp không theo thứ tự hơn khi tăng dần không? –

+0

Tôi có phương pháp kiểm tra xem mảng có được sắp xếp không và nó có nói rằng nó không phải là? Tôi thực sự bối rối –

+0

@NandaArdianto hãy giữ nó cho một câu hỏi cho mỗi bài đăng. Xin vui lòng có một bài mới với mã của phương pháp đó? – Mureinik

Các vấn đề liên quan