冒泡排序
public void bubbleSort(int[] array) {
int temp;
// 第一层循环: 表明要比较的次数,比如list.count个数,肯定要比较count-1次
for (int i = 0; i < array.length - 1; i++) {
// list.count-1:取数据最后一个数下标,
// j>i: 从后往前的的下标一定大于从前往后的下标,否则就超越了。
for (int j = array.length - 1; j > i; j--) {
// 如果前面一个数大于后面一个数则交换
if (array[j - 1] > array[j]) {
temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}
}
}
}
选择排序
//选择排序
public void selectSort(int [] a) {
int n = a.length;
for(int k=0; k<n-1; k++) {
int min = k;
for(int i=k+1; i<n; i++) {
if(a[i] < a[min]) {
min = i;
}
}
if(k != min) {
int temp = a[k];
a[k] = a[min];
a[min] = temp;
}
}
}
插入排序
public static void insertSort(int datas[]) {
int j = 0; // 第二个数据开始插入的下标
int i = 0;// 插入是次数
for (i = 1; i < datas.length; i++) {
int temp = datas[i];
for (j = i - 1; j >= 0; j--) {
if (datas[j] > temp) {
datas[j + 1] = datas[j];
} else {
break;
}
}
// 判断 j == -1 或者 就是第一个小于等于temp数据的位置
datas[j + 1] = temp;
}
}
快速排序
/**
* 快速排序
*
* @param datas
*/
public static void quickSort(int datas[], int start, int end) {
if (start >= end) {
return;
} else {
int middle = findMiddle(datas, start, end);
quickSort(datas, start, middle - 1);
quickSort(datas, middle + 1, end);
}
}
private static int findMiddle(int datas[], int start, int end) {
int temp = datas[end];// 参照物
int left = start - 1;
int right = end;
while (true) {
// 1.从左边依次找数据,找到第一个比参照大的数据
while (++left < end && datas[left] <= temp);
if (left == end) {
//参照物是最大值
break;
}
// 2.从右边依次找数据,找到第一个比参数小的数据
while (--right >= start && datas[right] >= temp);
// 3,比较是否出现交叉(left 和 right)
if (left < right) {
// 4,如果没有交叉,交换左右位置的数据
int d = datas[left];
datas[left] = datas[right];
datas[right] = d;
} else {
// 5,如果出现交叉,交换左指针和参照物的值,结束
int d = datas[left];
datas[left] = datas[end];
datas[end] = d;
break;
}
}
return left;
}
public void quickSort(String[] strData, int left, int right) {
String middle, tempDate;
int i, j;
i = left;
j = right;
middle = strData[(i + j) / 2];
do {
while(strData[i].compareTo(middle)<0&&i<right)
i++;//找出左边比中间值大的数
while (strData[j].compareTo(middle)>0&&j>left)
j--;//找出右边比中间值小的数
if(i<=j){//将左边大的数和右边小的数进行替换
tempDate =strData[i];
strData[i]=strData[j];
strData[j]=tempDate;
}
i++;
j--;
if(i<right){
quickSort(strData, i, right);
}
if(j>left){
quickSort(strData, left, j);
}
} while (i <= j);// 当两者交错是停止
}