选择排序的原理:
遍历所有的元素,得到最小的元素,并将最小的元素与左边第一个元素进行交换,再次遍历除了第一个位置的所有元素,得到最小的元素,与左边第二个元素进行交换。当进行第二次遍历的时候,将最小的元素与左边的第二个元素进行交换,如此循环遍历,即可得到排序后的元素。
Demo实现的基本基本步骤:
1、准备数组
2、编写常见的数组操作方法
3、编写选择排序的方法
4、测试选择排序
具体参考如下:
package com.zcp.ch03;
/**
- @author Administrator
- 冒泡排序的实现
*/
public class SelectArray {//数组
private long[] arr = null;//数组中有效数据的大小
private int elems;
public SelectArray() {
arr = new long[50];
}public SelectArray(int length){
arr = new long[length];
}/**
- 插入数据的操作
- @param value
*/
public void insert(long value){
arr[elems] = value;
elems++;
}
/**
- 查找指定的数据,如果能够查找到则返回数组的坐标,否则返回-1.
- @param value
- @return
*/
public int find(long value){
int i = 0;
for(i=0;i<elems;i++){
if(value==arr[i])
break;
}if(i >(elems-1)){
return -1;
}return i;
}
/***
- 删除数据的操作,删除成功返回true,删除失败返回false
- @param value
*/
public boolean delete(long value){int key = find(value);
if(key == -1){
System.out.println("删除数据失败,未查找到要删除的数据");
return false;
}
for (int i = key; i < elems; i++) {
arr[i] = arr[i+1];
}
elems--;
return true;
}
/***
- @param oldValue
- @param newValue
- @return 如果修改成功返回true,修改失败返回false
*/
public boolean changeValue(long oldValue,long newValue){
int key = find(oldValue);
if(key == -1){
System.out.println("需要修改的数据不存在,修改失败");
return false;
}
arr[key] = newValue;
return true;
}
/**
- 该方法主要是实现了选择排序
- 具体的实现描述如下:
- 该方法中的min 即表示最小的元素
- 在进行一次遍历后就将最小的元素放到数组的最左边,然后循环进行即可实现选择排序
- */
public void selectSort(){int min = 0;
long tmp = 0;
for (int i = 0; i < elems-1; i++) {for (int j = i; j < elems; j++) { if(arr[min] > arr[j]){ min = j; } } tmp = arr[i]; arr[i] = arr[min]; arr[min] = tmp;
}
}
/**
- 该方法主要是变量数组并显示
*/
public void disPlay(){
for (int i = 0; i < elems; i++) {
System.out.print(arr[i]+ " " );
}
System.out.println();
}
}
测试代码如下:
package com.zcp.ch03;
public class TestSelectMain {
public static void main(String[] args) {
SelectArray bubbleArray = new SelectArray();
bubbleArray.insert(10);
bubbleArray.insert(50);
bubbleArray.insert(80);
bubbleArray.insert(2);
bubbleArray.insert(2);
bubbleArray.disPlay();
bubbleArray.selectSort();;
System.out.println("选择排序后的数据如下:");
bubbleArray.disPlay();
}
}
原文地址:http://blog.51cto.com/7298246/2154949