興味深い配列

今日、私はそれがC、C ++ですが、非常に異なるああの配列があると、Java配列の側面について学びました。私はそれのこの側面を学習した後、独自の知識と経験を紹介しましょう。
オープンのアレイのうち文のJava:
アレイタイプ[]配列名=新しい配列型[配列の長さ];(一次元配列)
例えば:INT []データは=新しいINT [10];
データ型のオブジェクト配列[] [] =新しいデータタイプ[行数] [列数];(2次元配列)
; [8] [7]そのようなINT [] [] =新しいintとしてデータ
:あってもよい
配列要素名= {配列型配列[] };
例えば:INT []データ= {1,2,2,3,4,5 }; // その長さは6であり、
データ・タイプ・オブジェクト配列[] [] = {{...}、{...}、... { }};
私たちは長さ6の配列を定義したと言うが、我々は避けるの配列境界に順に7つの要素は、この時間に行きたい場合は、我々は新しいアレイを再オープンすることができます。データは新しいint型= [7] ;
上記の我々は型配列、何のいくつかのタイプを持つ配列を、言及しましたか?私はあなたを教え、いや、先生が言った、アレイは8種類あり:.のInt、ダブル、文字、長いバイト、ブール、フロート、短い
そして、私たちはその中に、学習の原則を感じるとC ++の側面配列をソートする必要があります同じ原理は、いわゆるオリジナルの狙いは、それではありません。のは、ソートやクイックソート良く知られている今のバブルについて少し話をしてみましょう。
バブル法デモ:
非常にシンプルより中古尋ねられたとき、非常に少ない、それが面接を理解されています!

すべての要素のペアごとの比較の順序、最後で最大。

すべてのペアワイズ比較の順序は、最終的な表面上の最大の残りの要素。

第二段階は、わずか数まで繰り返されます。
サイクル数を設定します。

セット開始の中央値を比較して、数字を終了します。

最小の前にペアごとの比較、。

サイクル数が完了するまで繰り返して、手順2と3。

int[] a={10,9,4,6,2,8,3,7,1,5};
		String act = e.getActionCommand();
		if("冒泡排序法".equals(act))
		for(int i=0;i<a.length;i++)
			for(int j=i+1;j<a.length;j++)
			{
				if(a[i]>a[j])
			{
				int temp=a[i];
				a[i]=a[j];
				a[j]=temp;
				}......

高速選別方法:
旅の記録を注文しては、他のものより小さいレコードキーワード部分の重要な部分は、二つの部分にそれぞれシーケンシングが注文の全配列まで継続前記二つの独立した部分、に分類されます。

ソートの簡単な例:

(A)旅行ソート処理:

注文全体のプロセス(B)

配列の配列全体、軸を見たゼロ番目の位置、及びそれが交換よりも小さい場合、それは治療よりも大きいより最後のものとして見ると、それよりも小さい線比の終了後に交換彼が交換さより少し交換。このようにサイクルにおいて、ソーティング旅行が完了し、左、右の中心軸は、これら2つの独立した種類の各アレイ、分割統治を使用し、その後、中心軸よりも大きく、より小さくなっています。

public   int getMiddle(int[] a, int low,int high)
    {
		int start = low;
		int end = high;
        int temp = a[start]; //数组的第一个作为中轴
        while(start< end)
        {
        while(start < end && a[end] > temp)
        {
            end--;
        }
        a[start] = a[end];//比中轴小的记录移到低端
         while(start < end && a[start] < temp)
        {
            start++;
        }
        a[end] = a[start] ; //比中轴大的记录移到高端
        }
         a[start] = temp ; //中轴记录到尾
         return start;
         }
         public void QuickSort(int[] a,int low,int high)
	    {
	        if(low < high)
	        {
	       int middle = getMiddle(a,low,high); //将numbers数组进行一分为二
	       QuickSort(a, low, middle-1);   //对低字段表进行递归排序
	       QuickSort(a, middle+1, high); //对高字段表进行递归排序
	        }
	    
	    }

その後、我々は、これは私が定期的にデモコードを書いている、これらの2個の動的イメージソート処理の視覚的表現のうちに自分自身の描画ボードを設定することができます。

import java.awt.FlowLayout;
import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Sort {

	public void showUI(){
		JFrame jfr = new JFrame();
		jfr.setSize(1000,800);
		jfr.setTitle("排序图像演示");
		jfr.setLocationRelativeTo(null);
		jfr.setDefaultCloseOperation(3);
		jfr.setLayout(new FlowLayout());
		DrawListener drawl = new DrawListener();
		JButton jbt = new JButton("冒泡排序法");
		jfr.add(jbt);
		jbt.addActionListener(drawl);
		JButton jbt1 = new JButton("快速排序法");
		jfr.add(jbt1);
		jbt1.addActionListener(drawl);
		jfr.setVisible(true);
		
		Graphics g =jfr.getGraphics();
		drawl.g=g;
	}
	public static void main(String[] agrs){
		Sort s =new Sort();
		s.showUI();
	}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class DrawListener implements ActionListener {
	
	Graphics g;
	public   int getMiddle(int[] a, int low,int high)
    {
		int start = low;
		int end = high;
        int temp = a[start]; //数组的第一个作为中轴
        while(start< end)
        {
        while(start < end && a[end] > temp)
        {
            end--;
        }
        a[start] = a[end];//比中轴小的记录移到低端
        g.setColor(Color.WHITE);
		g.fillRect(0,0,2000,1000);
		for(int k=0;k<a.length;k++)
		{
			
			Color c =new Color(0,a[k]*10,0);
			g.setColor(c);
			g.drawString(""+a[k],(k*40)+40, 150);
			
			g.fillRect(k*40+40,200,20,20*a[k]);
		}
		try {
			Thread.sleep(400);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
        while(start < end && a[start] < temp)
        {
            start++;
        }
        a[end] = a[start] ; //比中轴大的记录移到高端
        g.setColor(Color.WHITE);
		g.fillRect(0,0,2000,1000);
		for(int k=0;k<a.length;k++)
		{
			
			Color c =new Color(0,a[k]*10,0);
			g.setColor(c);
			g.drawString(""+a[k],(k*40)+40, 150);
			
			g.fillRect(k*40+40,200,20,20*a[k]);
		}
		try {
			Thread.sleep(700);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
        }
        a[start] = temp ; //中轴记录到尾
        g.setColor(Color.WHITE);
		g.fillRect(0,0,2000,1000);
		for(int k=0;k<a.length;k++)
		{
			
			Color c =new Color(0,a[k]*10,0);
			g.setColor(c);
			g.drawString(""+a[k],(k*40)+40, 150);
			
			g.fillRect(k*40+40,200,20,20*a[k]);
		}
		try {
			Thread.sleep(700);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
        return start ; // 返回中轴的位置
    }
	 public void QuickSort(int[] a,int low,int high)
	    {
	        if(low < high)
	        {
	       int middle = getMiddle(a,low,high); //将numbers数组进行一分为二
	       QuickSort(a, low, middle-1);   //对低字段表进行递归排序
	       QuickSort(a, middle+1, high); //对高字段表进行递归排序
	        }
	    
	    }
	/*/public void FastSort(int[] a,int low,int high){
		int start = low;
		int end =high;
		int temp=a[low];
		while(start<end){
			while(start<end&&a[end]>temp){
				end--;
			}
			a[start]=a[end];
			while(start<end&&a[start]<temp){
				start++;
			}
			a[end]=a[start];
			a[start]=temp;
			if(start<end){
				FastSort(a,low,start-1);
				FastSort(a,start+1,high);
			}
		}
		
	}/*/
	public void actionPerformed(ActionEvent e){
		int[] a={10,9,4,6,2,8,3,7,1,5};
		String act = e.getActionCommand();
		if("冒泡排序法".equals(act))
		for(int i=0;i<a.length;i++)
			for(int j=i+1;j<a.length;j++)
			{
				if(a[i]>a[j])
			{
				int temp=a[i];
				a[i]=a[j];
				a[j]=temp;
				g.setColor(Color.WHITE);
				g.fillRect(0,0,2000,1000);
				for(int k=0;k<a.length;k++)
				{
					
					Color c =new Color(0,a[k]*10,0);
					g.setColor(c);
					g.drawString(""+a[k],(k*40)+40, 150);
					
					g.fillRect(k*40+40,200,20,20*a[k]);
				}
				try {
					Thread.sleep(400);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
				
			}
		if("快速排序法".equals(act)){
			QuickSort(a, 0, 9);
			for(int i=0;i<10;i++)
				System.out.println(" "+a[i]);
		}

}
}
公開された22元の記事 ウォン称賛27 ビュー2859

おすすめ

転載: blog.csdn.net/weixin_44346470/article/details/88715010