永远温柔,永远知进退。
冒泡排序
从小到大或从大到小进行排序,采用双重for循环嵌套得方式进行排序,可以利用Boolean进行标识减少排序得次数来优化程序。
int[] arr = {};//定义一个数组
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = true;
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = false;
}
count++;
}
if(flag) {
break;
}
}
选择排序
顾名思义有选择得进行排序,比如说有一组数字,遍历找到最小与第一个数字交换,再找到第二小的数与第二位交换,以此类推,直至结束。
int[] arr = {};//定义一个数组
for (int i = 0; i < arr.length - 1; i++) {
int index = i;
for (int j = 1 + i; j < arr.length; j++) {
if (arr[j] < arr[index]) {
index = j;//找到最小元素的索引记录下来
}
}
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
插入排序
利用第二个数和第一个数进行比较,若小则插到索引为0的位置上,第三个数和第二个数进行比较,若小则插到索引为1的位置上,若大则不动,第四个数和第三个数进行比较,若小则插到索引为2的位置上,若大则不动,以此类推直至结束。
int[] arr = {};//定义一个数组
for (int i = 1; i < arr.length; i++) {
// 定义待插入的数
int insertValue = arr[i];
// 找到待插入数的前一个数的下标
int insertIndex = i - 1;
while (insertIndex >= 0 && insertValue < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
arr[insertIndex + 1] = insertValue;
}
希尔排序
对数组长度进行二分法进行元素的排序,比如长度为10,第一次则10/2=5组,也就是说第一个和第六个元素为一组,第二个和第七个为一组,以此类推两个元素进行比较若第六个比第一个小,则两个元素进行互换。第二次为5/2=2组,13579为一组,246810为一组,元素交叉,两组元素分别进行插入排序,第三次2/2=1组,进行插入排序,到此结束。
int[] arr = {};
for (int gap = arr.length / 2; gap > 0; gap /= 2) {
// 对数组元素进行分组
for (int i = gap; i < arr.length; i++) {
// 遍历各组中的元素
for (int j = i - gap; j >= 0; j -= gap) {
// 交换元素
if (arr[j] > arr[j + gap]) {
int temp = arr[j];
arr[j] = arr[j + gap];
arr[j + gap] = temp;
}
}
}
}
以上均为闲暇时光随便整理,若哪里说的不对还望指教,谢谢。