基本的排序算法是很直观的算法
选择排序,冒泡排序,插入排序,交换排序
选择排序
选择排序就像他的名字一样,每一次的遍历选择其中最大或者最小的数值将其放在数组首部或者尾部。
这里选择最小的数字放在数组首部
public void selectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int min = i; //初始化最小值数组下标
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
min = j; //如果找到了更小的数,交换下标
}
}
if (min != i) { //交换选择出来的值
swap(arr,min,i);
}
}
}
冒泡排序
冒泡排序,遍历数组将其两两比较,交换位置,最大或者最小的数就会慢慢的像冒泡一样交换到指定位置
这里慢慢的将最大的数字浮到最后的位置。
public void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = true; //这里可以设置一个标志位
for (int j = 0; j < arr.length - 1 - i; j++) { //这里arr.length - 1 - i仅仅比较前面没有比较过的数字
if (arr[j] > arr[j + 1]) { //慢慢的将最大的数字浮在最后
swap(arr,j,j+1);
flag = false;
}
}
if (flag) { //如果没有进行交换,说明排序完成不用在循环了
break;
}
}
}
插入排序
插入排序,从头或者尾部开始遍历,将指定的数字插入到指定的位置。
这里通过从头开始遍历的方式,从小到大排序,进行插入操作。
public static void insertionSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int j = i;
while(j>0&&a[j]<a[j-1]){
swap(arr,j,j-1);
j--;
}
}
}
shell排序
增强型插入排序,通过分组插入的方式进行排序,通过不断的分组,直到dk==1为止,这个时候将会进行一次遍历的插入排序,由于已经通过分组的排序,效率得到了提升。
void shellSort(int arr[],int size)
{
int dk;
while(dk=size/2)
{
for(int i=dk;i<size;i++)
{
int j=i;
while(j>=dk&&arr[j]<arr[j-dk])
{
swap(arr[],j,j-dk);
j-=dk;
}
}
}
}
交换排序
如果说选择排序就是记录下数组下标位置,最后进行交换,交换排序就是当发现位置需要交换时候,就进行交换
同样从小到大排序
public static void swapSort(int[] array){
for(int i=0; i<array.length-1; i++){
for(int j=i+1; j<array.length; j++){
if(array[i]>array[j]){
int temp=array[i]; //交换位置
array[i]=array[j];
array[j]=temp;
}
}
}
}