排序演算法總結

2021-07-10 12:00:52 字數 2338 閱讀 6019

class solution

num[i] = temp;

}} return num;

} /*演算法思想綜述:

1.temp存放當前要插入的元素;

2.在當前插入元素之前的所有元素都認為是已排序好的;

3.如果當前元素比前面的元素小,則開始移動元素

*/ /*shell_sort(希爾排序)*/

vectorshell_sort(vectornum)

num[j] = temp;}}

}step = step / 2;

} return num;

} /*演算法綜述:

1.j>i要放在num[j - step]>temp的前面,否則會出現容器下標越界

2.在取增量的時候有可能在後面的元素會被劃分到第1組,而前面相同

的元素卻被劃分到第2組,如下所示:

例子 3 5 10 8 7 2 8 1 20 6

d=2 分成2組 (3 10 7 8 20) 和(5 8 2 1 6) 第一組的8在第二組的後面

*/ /**************************select_sort(選擇排序)*************************************/

/*(******_select_sort)簡單選擇排序,每一趟可以確定兩個元素*/

vector******_select_sort(vectornum)

if (num[j]< num[min])

}//該交換操作還可分情況討論以提高效率

if (num[i] != num[min])

if (num[n - i - 1] != num[max])

} return num;

} /*演算法綜述:

1.趟數的確定,一共n個元素,每次確定兩個元素,一共需要[n/2]趟

2.初始最大最小元素的選取,一定要選擇相同的元素,然後和當前剩餘

元素逐個進行比較。如果最小數和最大數的下標發生變化,則用這兩個

下標對應的元素分別和對應的頭尾元素對換,然後縮小比較範圍。

*/ /*(heap sort)堆排序*/

vectorheap_sort(vector&num,int start, int end)

if (2 * i + 2bubble_sort(vectornum)

}} return num;

} /*演算法綜述:

1.比較和交換同時進行,如果從陣列頭部開始的話,要將較大的數向下沉;

2.如果是陣列尾部開始的話,就要將較小的數向上浮。

*/ vectorbubble_sort_improvement(vectornum)

if (min != i)

} return num;

} /*演算法綜述:

1.改進方法減少了交換的繁瑣操作,同樣是設定比較區間的第乙個數為最小值,然後通過下標

比較找到比預設最小值更小的交換。

2.從本質上來說和簡單選擇排序有異曲同工之處。

*/ //quick_sort(快速排序)

vectorquick_sort(vector&num, int low, int high)

num[low] = key;

quick_sort(num, beg, low - 1);

quick_sort(num, low + 1, end);

return num;

} /* 1、要牢記遞迴的出口if (low >= high)return num;如果沒有,則會出現low比high大,

雖然while (lowmerge_sort(vector&num)

while (i <= mid && j <= high)

while (i <= mid)//若比較完之後,第乙個有序區仍有剩餘,則直接複製到t陣列中

temp[k++] = num[i++];

while (j <= high)//同上

temp[k++] = num[j++];

for (i = low, k = 0; i <= high; i++, k++)//將排好序的存回arr中low到high這區間

num[i] = temp[k];

deletetemp;//刪除指標,由於指向的是陣列,必須用delete

} vectormergesort(vector&num, int low, int high)

return num;

} /*演算法綜述:

1.繼續切割條件if (low2.每次合併所動態分配的記憶體的大小和作用

*/};

排序演算法總結

1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...

排序演算法總結

1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...

排序演算法總結

學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...