一、这篇博客使用Java代码实现数据结构中的六大排序
1、冒泡排序,2、选择排序,3、插入排序,4、希尔排序,5、快速排序,6、归并排序
二、Java代码实现
【1】、冒泡排序
package sort;
/**
*
* @author czd
*
*/
public class BubbleSort {
/**
* 冒泡排序
* @param num
*/
public static void bubbleSort(int num[]) {
for(int i = 0; i < num.length; i++) {
for(int j = num.length - 1; j > i; j--) {
if(num[j] < num[j - 1]) {
int tem = num[j];
num[j] = num[j - 1];
num[j - 1] = tem;
}
}
}
}
public static void main(String[] args) {
int num[] = {1 , 3 , 2 , 4 , 9 , 5 , 6 , 7 , 8};
for(int i : num) {
System.out.print(i + " ");
}
bubbleSort(num);
System.out.println();
for(int i : num) {
System.out.print(i + " ");
}
}
}
【2】、选择排序
package sort;
/**
*
* @author czd
*
*/
public class SelectSort {
/**
* 选择排序
* @param num
*/
private static void selectSort(int[] num) {
for(int i = 0; i < num.length; i++) {
int minIndex = i;
for(int k = i + 1; k < num.length; k++) {
if(num[k] < num[minIndex]) {
minIndex = k;
}
}
int tem = num[i];
num[i] = num[minIndex];
num[minIndex] = tem;
}
}
public static void main(String[] args) {
int num[] = {1 , 3 , 2 , 4 , 9 , 5 , 6 , 7 , 8};
for(int i : num) {
System.out.print(i + " ");
}
selectSort(num);
System.out.println();
for(int i : num) {
System.out.print(i + " ");
}
}
}
【3】、插入排序
package sort;
/**
*
* @author czd
*
*/
public class InsertSort {
/**
* 直接插入排序
* @param num
*/
private static void insertSort(int[] num) {
for(int i = 1; i < num.length; i++) {
int t = num[i];
if(num[i] < num[i - 1]) {
num[i] = num[i - 1];
int k = 0;
for( k = i - 2; k >= 0 && t < num[k]; k--) {
num[k + 1] = num[k];
}
num[k + 1] = t;
}
}
}
public static void main(String[] args) {
int num[] = {1 , 3 , 2 , 4 , 9 , 5 , 6 , 7 , 8};
for(int i : num) {
System.out.print(i + " ");
}
insertSort(num);
System.out.println();
for(int i : num) {
System.out.print(i + " ");
}
}
}
【4】、希尔排序
package sort;
/**
*
* @author czd
*
*/
public class ShellSort {
/**
* 希尔排序
* @param num
*/
private static void shellSort(int[] num , int d) {
for(int i = d; i < num.length; i++) {
int t = num[i];
if(num[i] < num[i - d]) {
num[i] = num[i - d];
int k = 0;
for( k = i - 2 * d; k >= 0 && t < num[k]; k -= d) {
num[k + d] = num[k];
}
num[k + d] = t;
}
}
}
public static void main(String[] args) {
int num[] = {1 , 3 , 2 , 4 , 9 , 5 , 6 , 7 , 8};
for(int i : num) {
System.out.print(i + " ");
}
for(int i = num.length; i >= 1;) {
shellSort(num , i);
i /= 2;
}
System.out.println();
for(int i : num) {
System.out.print(i + " ");
}
}
}
【5】、快速排序
package sort;
/**
*
* @author czd
*
*/
public class QuickSort {
/**
* 快速排序的一趟排序
* @param arr
* @param left
* @param right
* @return
*/
public static int Sort(int arr[] , int left , int right) {
int tem = arr[left];
while(left < right) {
while(left < right && tem < arr[right]) {
right--;
}
if(left < right) {
arr[left] = arr[right];
left++;
}
while(left < right && tem > arr[left]) {
left++;
}
if(left < right) {
arr[right] = arr[left];
right--;
}
}
arr[left] = tem;
return left;
}
/**
* 快速排序
* @param arr
* @param left
* @param right
*/
public static void quickSort(int arr[] , int left , int right) {
if(left < right) {
int point=Sort(arr , left , right);
quickSort(arr , left , point-1);
quickSort(arr , point + 1 , right);
}
}
public static void main(String[] args) {
int num[] = {1 , 3 , 2 , 4 , 9 , 5 , 6 , 7 , 8};
for(int i : num) {
System.out.print(i + " ");
}
quickSort(num , 0 , num.length - 1);
System.out.println();
for(int i : num) {
System.out.print(i + " ");
}
}
}
【6】、归并排序
package sort;
public class MergeSort {
/**
* 将两个数组进行复制
* @param A
* @param B
*/
public static void cope(int A[] , int B[]) {
int k = 0;
for(int i = 0; i < A.length; i++) {
B[k++] = A[i];
}
}
/**
* 返回两个数的最小值
* @param a
* @param b
* @return
*/
public static int min(int a , int b) {
return a < b ? a : b;
}
/**
* 一次归并的结果排序
* @param num
* @param out
* @param s
* @param M
* @param N
*/
private static void merge(int[] num , int out[] , int s , int M , int N) {
int i = s , j = M + 1 , k = s;
while(i <= M && j <= N) {
if(num[i] < num[j]) {
out[k++] = num[i++];
}else {
out[k++] = num[j++];
}
}
while(i <= M) {
out[k++] = num[i++];
}
while(j <= N) {
out[k++] = num[j++];
}
}
public static void mergeSort(int num[] , int out[]) {
for(int width = 1; width < num.length; width *= 2) {
for(int i = 0; i < num.length; i = i + 2 * width ) {
merge(num, out, i, min(i + width -1 , num.length - 1), min(i + 2 * width - 1 , num.length - 1));
}
cope(out, num);
}
}
public static void main(String[] args) {
int num[] = {1 , 3 , 2 , 4 , 9 , 5 , 6 , 7 , 8};
int out[] = new int[num.length];
for(int i : num) {
System.out.print(i + " ");
}
mergeSort(num , out);
System.out.println();
for(int i : out) {
System.out.print(i + " ");
}
}
}
【7】、堆排序
package sort;
/**
* @Author czd
* @Date:createed in
* @Version: V1.0
*/
public class HeapSort {
public static void main(String[] args) {
int num[] = {1 , 3 , 2 , 4 , 9 , 5 , 6 , 7 , 8};
for(int i : num) {
System.out.print(i + " ");
}
heapSort(num , num.length);
System.out.println();
for(int i : num) {
System.out.print(i + " ");
}
}
public static void heapSort(int[] nums,int length){
buildHeap(nums,length);
for (int i = length - 1; i >= 0; i--){
swap(nums,i,0);
heapify(nums,i,0);
}
}
public static void buildHeap(int[] nums,int length){
int lastNode = length - 1;
int parent = (lastNode - 1) / 2;
int k;
for (k = parent; k >= 0; k--){
heapify(nums,length,k);
}
}
public static void heapify(int[] nums, int length,int i){
if (i >= length){
return;
}
int left = 2 * i + 1;
int right = 2 * i + 2;
int max = i;
if (left < length && nums[max] < nums[left]){
max = left;
}
if (right < length && nums[max] < nums[right]){
max = right;
}
if (max != i){
swap(nums,max,i);
heapify(nums,length,max);
}
}
private static void swap(int[] nums, int max, int i) {
int temp = nums[max];
nums[max] = nums[i];
nums[i] = temp;
}
}