الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تمثيل عملية ال insertion sort

بدأه ريحانة الاقصى في 20 فبراير 2011 · 5 رد · 511 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لقد قمت بعملية تمثيل ل insertion sort

حيث يقوم بعد الضغط على الزر sort بعرض جميع العمليات

ولكن المشكلة بمجرد الضغط على الزر تظهر جميع العمليات مرة واحدة هل من الممكن ظهورها منفردة بالتحكم فيها بالضغط على زر next لاظهار كل خطوة لوحدها

الملف بالمرفقات

وشكرا

insertion.java

#2
package testoracle;

/**
 *
 * @author Admin
 */
public class inser_ {

public static void insertionSort(int[] list, int length) {
    int firstOutOfOrder, location, temp;

    for(firstOutOfOrder = 1; firstOutOfOrder < length; firstOutOfOrder++) { //Starts at second term, goes until the end of the array.
                         for(int i = 0 ; i<list.length;i++){
System.out.println("-----------------\n"+list);
}
        if(list[firstOutOfOrder] < list[firstOutOfOrder - 1]) { //If the two are out of order, we move the element to its rightful place.
            temp = list[firstOutOfOrder];
            location = firstOutOfOrder;

            do { //Keep moving down the array until we find exactly where it's supposed to go.

                list[location] = list[location-1];
                location--;

            }
            while (location > 0 && list[location-1] > temp);

            list[location] = temp;

        }

    }
}
public static void main(String[] args){
int [] a ={1,5,3,10,0,67};
insertionSort(a,a.length);

}

}

هذا مثال بسيط راح يفيدك

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#3

شكرا اخي الكريم على الكود

ولكن البرنامج عندي يقوم بالترتيب بشكل صحيح ولكن المشكلة انه يظهر النتائج دفعة واحدة انا اريد اظهارها خطوة خطوة

من خلال وضع زر مثل next

المشكلة عندي لا اعرف كيف اجعله يطبع الخطوات بشكل منفصل بدلا من دفعة واحدة

#4
ريحانة الاقصى كتب:

شكرا اخي الكريم على الكود

ولكن البرنامج عندي يقوم بالترتيب بشكل صحيح ولكن المشكلة انه يظهر النتائج دفعة واحدة انا اريد اظهارها خطوة خطوة

من خلال وضع زر مثل next

المشكلة عندي لا اعرف كيف اجعله يطبع الخطوات بشكل منفصل بدلا من دفعة واحدة

تفضلى اختى الكريمه

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

public class insertion extends JFrame implements ActionListener {

	private JTextField[] textfields = new JTextField[7];
	JPanel resultPanel = new JPanel(new GridLayout());
	ArrayList<JPanel> panels = new ArrayList<JPanel>();
	boolean isSearch = true;
	int size = 1;
	JButton b2 = new JButton("sort");

	public insertion() {
    	this.setLocation(200, 200);
    	this.setTitle("homwork # 1");
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	this.setVisible(true);
    	this.setSize(400, 300);

    	setLayout(new BorderLayout());
    	// setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
    	JPanel textFieldPanel = new JPanel(new GridLayout(1, 5, 5, 5));

    	for (int i = 0; i < textfields.length; i++) {
        	JTextField field = new JTextField(3);
        	field.setText((int) (Math.random() * 10) + "");
        	textfields = field;
        	textFieldPanel.add(field);
    	}
    	textFieldPanel.setBorder(new TitledBorder(" "));

    	textFieldPanel.add(b2);
    	b2.addActionListener(this);

    	add(textFieldPanel, BorderLayout.NORTH);
    	this.pack();
	}

	private void sortAction() {
    	if (isSearch) {
        	resultPanel.removeAll();
        	GridLayout g = (GridLayout) resultPanel.getLayout();
        	g.setRows(1);
        	insertionSort();
        	isSearch = false;
    	}
    	resultPanel.updateUI();
    	for (int i = 0; i < size; i++) {
        	resultPanel.add(panels.get(i));
    	}
    	size++;
    	if (size > panels.size()) {
        	b2.setEnabled(false);
    	}
    	add(resultPanel, BorderLayout.CENTER);
    	this.pack();
	}

	public void actionPerformed(ActionEvent e) {
    	if (e.getActionCommand().equals("sort")) {
        	sortAction();
    	}
	}

	public static void main(String[] args) {
    	insertion frame = new insertion();
	}

	public void insertionSort() {
    	int[] x = new int[textfields.length];
    	for (int i = 0; i < textfields.length; i++) {
        	x = Integer.parseInt(textfields.getText());
    	}
    	for (int i = 1; i < x.length; i++) {
        	for (int j = i; j > 0 && x[j - 1] > x[j]; j--) {
            	swap(x, j, j - 1);
            	printArray(x);
        	}
    	}
	}

	public void swap(int[] x, int a, int b) {
    	int t = x[a];
    	x[a] = x;
    	x = t;
	}

	private void printArray(int[] x) {
    	JPanel panel = new JPanel(new GridLayout(1, x.length));
    	for (int i = 0; i < x.length; i++) {
        	JTextField field = new JTextField(3);
        	field.setText("" + x);
        	panel.add(field);
    	}
    	GridLayout g = (GridLayout) resultPanel.getLayout();
    	g.setRows(g.getRows() + 1);
    	panels.add(panel);
//    	resultPanel.add(panel);
	}
}

Software Developer
Mahmoudkelany.com


 

#5

شكرا جزيلا

#6

والكود اللي وضعته لك يقوم بنفس العملية التي تريدين لكن عن طريق الـ console

:P

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

مواضيع مشابهة