java實現七大排序

2021-09-19 07:36:59 字數 3513 閱讀 9340

package com.tx;

public class sort }}

}/**

* 選擇排序演算法

* 簡單選擇排序的基本思想:

* 第1趟,在待排序記錄data[1]~data[n]中選出最小的記錄,將它與data[1]交換;

* 第2趟,在待排序記錄data[2]~r[n]中選出最小的記錄,將它與data[2]交換;

* 以此類推,第i趟在待排序記錄data[i]~data[n]中選出最小的記錄,將它與data[i]交換,使有序序列不斷增長直到全部排序完畢。

** 時間複雜度:o(n^2)

* 空間複雜度:o(1)

* 穩定性:不穩定

*/public static void selectsort(int data)

}//在內層迴圈結束,也就是找到本輪迴圈的最小的數以後,再進行交換

if (i != k) }}

/**直接插入排序

直接插入排序就是從待排序列中選出乙個元素,插入到已經有序的元素之中,直到所有的元素都插入到有序序列中所有的元素就全部有序了。

方法:將第乙個元素看做是有序的元素(即待排序列的第乙個元素看做是有序序列),然後我們將第二個元素和有序序列(即

第乙個元素)作比較,按正確的序列插入到序列中去。然後在將第三個元素和前面有序序列(即整個待排序列的前兩個元素)作比較,將第

三個插入到前兩個元素中去,使得前三個元素有序。以此類推,直到所有的元素都有序。

時間複雜度:最好:有序:o(n) 最壞:o(n^2)

空間複雜度:o(1)

穩定性:穩定

*/public static void insertsort1(int data)

else

}data[j + 1] = key;}}

public static void insertsort2(int data)}}

/*希爾排序也稱之為遞減增量排序,他是對插入排序的改進。在第二步插入排序中,我們知道,插入排序對於近似已排好序的序列來說,效率很高,

可以達到線性排序的效率。但是插入排序效率也是比較低的,他一次只能將資料向前移一位。

比如如果乙個長度為n的序列,最小的元素如果恰巧在末尾,那麼使用插入排序仍需一步一步的向前移動和比較,要n-1次比較和交換。

希爾排序通過將待比較的元素劃分為幾個區域來提公升插入排序的效率。

這樣可以讓元素可以一次性的朝最終位置邁進一大步,然後演算法再取越來越小的步長進行排序,

最後一步就是步長為1的普通的插入排序的,但是這個時候,整個序列已經是近似排好序的,所以效率高。

*/public static void shellsort(int data)

data[j+size]=temp;}}

if(size==1)}}

/*快速排序:

*/public static void quicksort(intdata,int left,int right)

}//最終將基準數歸位

data[left] = data[i];

data[i] = temp;

quicksort(data, left, i-1);//繼續處理左邊的,這裡是乙個遞迴的過程

quicksort(data,i+1, right);//繼續處理右邊的 ,這裡是乙個遞迴的過程

}/**

* 堆排序

* 時間複雜度:o(nlog2n)

* 空間複雜度:o(1)

* 穩定性:2 3 2` 不穩定

* * */

public static void adjust(int data,int start,int end) }}

//堆排序

public static void heapsort(int data,int len)

}//歸併排序

public static void merge(int data, int left, int mid, int right, int extra)

else

}while (left_i < mid)

while (right_i < right)

for (int i = left; i < right; i++)

}// [left, right)

public static void __mergesort(int data, int left, int right, int extra)

if (left >= right)

int mid = left + (right - left) / 2;

__mergesort(data, left, mid, extra);//左邊歸併排序,使得左子串行有序

__mergesort(data, mid, right, extra);//右邊歸併排序,使得右子串行有序

merge(data, left, mid, right, extra);//將兩個有序子陣列合併操作

}// 穩定

public static void mergesort(int data, int size)

public static void printarray(int data)

/*foreach的書寫格式:

for(元素型別 元素名稱 : 遍歷陣列(集合)(或者能進行迭代的))

*/for (int i : data)

system.out.println();

}public static void swap(int data,int x,int y)

public static void main(string args) ;

system.out.print("排序前:");

printarray(arr);

bubblesort(arr);

system.out.print("氣泡排序後:\t");

printarray(arr);

selectsort(arr);

system.out.print("選擇排序後:\t");

printarray(arr);

insertsort2(arr);

system.out.print("直接插入排序後:");

printarray(arr);

shellsort(arr);

system.out.print("希爾排序後:\t");

printarray(arr);

heapsort(arr,arr.length);

system.out.print("堆排序後:\t");

printarray(arr);

mergesort(arr,arr.length);

system.out.print("歸併排序後:\t");

printarray(arr);

quicksort(arr,0,arr.length-1);

system.out.print("快速排序後:\t");

printarray(arr);

}}

Java實現七大排序

來自import com.sun.scenario.effect.merge public class sort 1.氣泡排序 時間複雜度為 n 2 空間複雜度o 1 穩定排序 public static void bubblesort int arr,int len if flag continu...

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...

七大排序演算法

七大排序分類 插入排序 直接插入排序 穩定 希爾排序 不穩定 選擇排序 簡單選擇排序 穩定 堆排序 不穩定 交換排序 氣泡排序 穩定 快速排序 不穩定 歸併排序。直接插入排序 時間複雜度 o n 2 演算法穩定性 穩定void straightinsertsort int a,int n 氣泡排序 ...