排序演算法的穩定性是指在待排序的序列中,存在多個相同的元素,若經過排序後這些元素的相對詞序保持不變,即xm=xn,排序前m在n前,排序後m依然在n前,則稱此時的排序演算法是穩定的。
先介紹一下常見的排序演算法: 直接插入排序、簡單選擇排序、氣泡排序、快速排序這四種排序.
一、直接插入排序《穩定》
演算法思路: 先將序列中第1個記錄看成乙個有序子串行, 然後從第2個記錄開始,逐個進行插入,直至整個序列有序,排序過程為n-1躺插入.
// 直接插入排序
void insertsort(int arr, int n)
// 插入操作
arr[j+1] = temp;
}}
二、簡單選擇排序《不穩定》演算法思路: 在所有記錄中選出最小的記錄, 把它與第1個記錄交換, 然後再剩餘的記錄內選出最小的記錄與第2個交換, 依次類推.
每趟只能確定乙個元素, 表長為n時需要n-1躺排序.
// 選擇排序
void selectsort(int arr, int n)
} if (min != i)}}
三、氣泡排序《穩定》演算法思路: 每趟不斷將記錄兩兩比較, 並按 "前小後打"(或"前大後小")規則交換.
// 氣泡排序(每趟排序找出最大的元素)
void bubblesort(int arr, int n)
} }}// 每趟排序找出最小的元素
void bubblesort1(int arr, int n)
} }}
四、快速排序《不穩定》排序演算法: 從待排序中任取乙個元素(如 第乙個)作為基準點, 所有比它小(或相等)的元素一律放前, 所有比它大的元素一律放後, 形成左右兩個子表. 然後再對各子表重新選擇基準點並按此規則調整,直到每個子表元素只剩乙個,此時便為有序序列了.
// 返回乙個基準點,並將小於基準點的元素放在基準點左邊,大於的放在右邊
int partition(int arr, int low, int high)
// 如果小於基準點就交換
swap(arr, low, high);
while(low < high && arr[low] <= point)
swap(arr, low, high);
} return low;
}// arg2: 初始位置 arg3:結尾元素位置
void quicksort(int arr, int low, int high)
}
常見排序演算法
一.選擇排序 1.概念 每次從無序的子陣列裡面選擇最小的數,放在有序區的後面 既與無序區的首元素交換 不穩定排序 時間複雜度o n 2 輔助儲存o 1 2.實現 int selection sort int a,int len len為陣列元素個數 二.氣泡排序 1.概念 重複訪問數列n 1次,每次...
常見排序演算法
1 插入排序 直接插入排序,是一種最簡單的排序方法,它的基本操作是將乙個記錄插入到已排好序的有序表中,從而得到乙個新的 記錄數增1的有序表。初始 38 65 27 76 13 i 1 13 選13為監視哨並假設為乙個有序序列 i 2 13 38 待插入元素38 13 i 3 13 38 65 待插入...
常見排序演算法
排序演算法作為常用的基本演算法,今天就來總結一下各種經典排序演算法,這裡只貼出 對演算法的文字描述可以在課本或其它部落格上找到很多詳盡的敘述,這裡直接上 而不是常見演算法書上的偽 希望對正在努力學資料結構與演算法的朋友們有幫助 1 氣泡排序 void bubblesort t a,int n if ...