一、冒泡排序
1、理解定义:循环走过需要排序的元素,依次比较相邻的两个元素,当前一个数字比后一个数字大时,就交换位置,直至没有元素交换,完成排序。由从小到大的顺序,一点点地把小的挪到前面,直到完全整齐地拍好为止。弄成矩形就感觉一个个矩形交换的时候像浮起来一样,从后往前(从下往上)就像冒泡一样,这样得名冒泡排序。
2、代码实现思路:
- 比较相邻的元素,如果前一个元素比后一个元素大,就交换;
- .采用for循环 对每一对相邻元素做相同的工作,直到最后一组为止;
- 针对所有元素重复以上步骤,最后一个元素是最大的;
3、主要代码f方法:
public void shorV(){
for(int i=0;i<arr.length;i++){
for(int j=1;j<arr.length;j++){
if(arr[i]>arr[j]){
int a=arr[i];
arr[j]=arr[i];
arr[j]=a;
}
}
}
for(k=0;k<arr.length;k++){
system.out.println(" "+ arr[k] )
}
}
上述代码中,arr代表未经排序的数列,经过该方法后arr就会变成按小到大排列的数列
二、选择排序
1.理解定义:计算机先对所有数字查看一边找出最小的数字,将其提到第一个,依次这样进行,直到最后一个为最大的为止。
2、代码思路: 第一次从 arr[0]~arr[n-1]中选取最小值, 与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2] 交换,…,第 i 次从 arr[i-1]~arr[n-1]中选取最小值,与 arr[i-1]交换,…, 第 n-1 次从 arr[n-2]~arr[n-1]中选取最小值, 与 arr[n-2]交换,总共通过 n-1 次,得到一个按排序码从小到大排列的有序序列。
3.代码:
public class VTest {
int[] ir = { 9, 7, 8, 0, 1, 3, 6, 4, 5 };
Graphics g;
public void shorV() {
JFrame jf=new JFrame();
jf.setTitle("选择排序");
jf.setSize(1100,750);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
jf.setLocationRelativeTo(null);
jf.setLayout(new BorderLayout());//边框布局
jf.setVisible(true);
g = jf.getGraphics();
for(int i = 0; i< ir.length; i++) {
for(int j = i+1; j < ir.length; j++){
//交换位置,引入一个中间值,采用赋值的方法,先交换再画图;若将此放到画完图的代码后面,最后一个图就不会交换了,因为数字已经交换完成了,就不会回去了
if(ir[i]>ir[j]){
int a=ir[j];
ir[j]= ir[i];
ir[i]=a;
g.clearRect(0, 0, 900, 900);//清屏
for(int k = 0; k< ir.length; k++){
g.drawString(" "+ir[k], 300+24*k, 410);
g.drawRect(300+24*k, 400, 20, -ir[k]*30);
g.setColor(Color.BLUE);
}
}
//休眠
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
for (int i = 0; i < ir.length; i++) {
System.out.print(ir[i] + " ");
}
}
public static void main(String[] args) {
new VTest().shorV();
}
}
三、补充拓展
java:十大排序
冒泡排序、选择排序、堆排序、希尔排序、快速排序等