先介绍基础的排序方法
1.冒泡排序
冒泡排序是一种简单的排序算法 其基本思路就是迭代对输入序列的第一个元素到最后一个元素进行两两比较。
优点
可以检测已排序序列
实现简单
缺点
速度太慢O(n^2)
算法
1.两两相比较 若大于或小于则替换
2.重复上述过程 遍历序列
2.选择排序
选择排序是一种原地算法,也就是不需要额外的空间,适用于小文件
优点
容易实现
原地排序
缺点
速度太慢O(n^2)
算法
1.寻找序列中的最小或最大值
2.与当前位置的值交换
3.重复上述过程,遍历序列
插入排序
插入排序是一种简单有效的排序算法。每次迭代过程中算法随机的重输入序列中移除一个元素并将其插入到正确的位置。
优点
实现简单
数据小效率高
效率略优于冒泡和插入
稳定性高
原地 经需要少量的辅助空间
缺点
效率依然很慢
算法
每次移除一个元素将其插入到一个已经排序好的数组中
算法实现
以下实现可能有错误,仅供参考
冒泡排序
// 冒泡排序
public void sortByBubble(int[] arr) {
int temp;
//遍历序列
for (int i = 0; i < arr.length; i++) {
//两两比较 每次选出一个最大值到序列末尾
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
选择排序
// 获取数组最小值
public int minIndex(int[] arr, int start) {
for (int i = start; i < arr.length; i++) {
if (arr[i] < arr[start]) {
start = i;
}
}
return start;
}
// 简单选择排序
public void sortBysimpleSel() {
int index;
for (int i = 0; i < arr.length; i++) {
//找出最小值
index = minIndex(arr, i);
//最小值与当前位置替换
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
}
插入排序
public void sortByInsert(int[] array) {
// 插入排序
//保证此位置之前的序列是已经排好序的
// 每次从输入的数据中移除一个元素将其插入已经排好序的序列中
// 所以当遍历一遍元素便排好了序列
// 从第二个开始
int j = 0;
for (int i = 1; i < array.length; i++) {
//将需要插入的数据保存
int temp = array[i];
j = i;
// 从此位置开始向前寻找(前面的序列已经排好序了) 直到找到比array[i]小的位置或者到头
while (j >= 1 && array[j - 1] > temp) {
// 如果array[j-1]比array[i]大则后移,空出位置
array[j] = array[j - 1];
j--;
}
//找到位置或者到了序列头
array[j] = temp;
}
到此基础排序的讲解到此结束。