面試排序演算法個人總結

2021-08-28 01:55:13 字數 1902 閱讀 6760

總結了很久的排序演算法,自己測試了很多次,一直寫在筆記本上,還是怕弄丟了,還是貼到部落格上面來吧

//氣泡排序:

/**

* 交換排序--氣泡排序

* * @param arr

*/public static void bubblesort(long arr)

}if (exchange == 0)

} }

插入排序:

/**

* 直接插入排序

* * @param arr

*/public static void insertsort(long arr)

arr[j] = temp;

} }

希爾排序:

/**

* 希爾排序

* @param arr

*/public static void shellsort(long arr)

arr[j] = temp;}}

} }

快速排序:

// 劃分陣列

public static int partition(long arr, int left, int right) else

} // long temp = arr[leftptr];

// arr[leftptr]=arr[right];

// arr[right] = temp;

swap(arr, leftptr, right);

return leftptr;

} private static void swap(long arr, int i, int j)

// 快速排序

public static void quicksort(long arr, int left, int right)

}

堆排序:

public static void heapsort(int array) 

} private static void initheap(int array)

} private static void adjustheap(int array, int n, int size)

if (array[child] > temp) else

} array[n] = temp;

}

//歸併排序

public static int mergesort(int array, int left, int right) ;

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

int l = mergesort(array, left, mid);

int r = mergesort(array, mid + 1, right);

return merge(l, r);

} // 將兩個陣列合併成乙個

public static int merge(int l, int r)

while (lp < l.length)

while (rp < r.length)

return result;

}

//選擇排序

// 每次從中選出最小的元素,只進行一次交換

// 相比冒泡,大大減少了元素的交換次數

public static void selectsort(int array)

}int temp = array[min];

array[min] = array[i];

array[i] = temp;

} }

排序演算法個人總結

最近在看演算法,自然而然地就看到了排序。下面記錄一下自己的學習過程。一 歸併排序 首先我說說我理解的歸併演算法的核心 歸即將陣列中分為小部分的集合,其中也即數成為區域性有序的集合。然後再將這些有序陣列合併起來。歸 一般以中點劃分,不斷地遞迴,以使陣列有序,其實歸和並是互動的。如8個數字,歸為4,4。...

面試排序演算法總結

從第二個元素開始,每次選擇乙個元素插入到之前已經排好序的部分。選擇插入位置的時候從後往前,將帶插入元素取出,依次後移大於帶插入元素的數。演算法複雜度 最好是正序有序,需要n次比較。最差逆序有序,複雜度o n2 平均複雜度o n2 插入排序是穩定的 void insertsort int a,int ...

面試 排序演算法總結

空間複雜度 快速排序是一種原地排序,只需要乙個很小的棧作為輔助空間,空間複雜度為o log2n 所以適合在資料集比較大的時候使用。時間複雜度 時間複雜度比較複雜,最好的情況是o n 最差的情況是o n2 所以平時說的o nlogn 為其平均時間複雜度。具體操作過程 隨便取乙個值 6 將其為基準進行排...