排序演算法(一)

2021-07-04 22:54:24 字數 2213 閱讀 3274

氣泡排序

基本思想:

在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉

,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。

氣泡排序的示例:

演算法實現

void print(int *arr, int size)

void bubble_sort(int *arr, int size)

} if(flag)//排好序退出,不用繼續比較

break;

print(arr,size);

}}

選擇排序基本思想:在要排序的一組數中,選出最小(或者最大)的一

個數與第1個位置的數交換;

然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元素(最後

乙個數)比較為止。

簡單選擇排序的示例:

演算法實現

void select_sort(int *arr, int size)

if( pos != j)

print(arr,size); }

}

插入排序基本思想:將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。

直接插入排序示例:

演算法實現

void insert_sort(int *arr, int size)

if(i != j + 1)

arr[j + 1] = temp;//插入

print(arr,size);

}}

希爾排序基本思想:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行依次直接插入排序。

操作方法:

選擇乙個增量序列t1,t2,…,tk,其中ti>tj,tk=1;

按增量序列個數k,對序列進行k 趟排序;

每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m 的子串行,分別對各子表進行直接插入排序。僅增量因子為1 時,整個序列作為乙個表來處理,表長度即為整個序列的長度。

希爾排序的示例:

演算法實現

void shell_insert(int *arr, int size, int store)

if(i != j + store)

arr[j + store] = temp;

print(arr,size); }}

void shell_sort(int *arr, int size, int *store, int num)

}

排序演算法(一)

這個學期課程很少,空閒時間很多,故重新複習了一下 演算法導論 中的常用演算法和資料結構,並且將實現 儲存到部落格,以便大三暑假找實習時方便複習。直接插入排序的思想非常簡單,將序列中第乙個元素作為乙個有序序列,然後將剩下的n 1個元素按關鍵字大小依此插入該有序序列,每插入乙個元素後依然保持該序列有序,...

排序演算法一

3個簡單的排序演算法,不多解釋了,直接上 include include void display int a,int n printf n void exchange int a,int i,int j 氣泡排序 void popsort int a,int n end for j printf ...

演算法 排序一

排序在商業資料處理和現代科學計算中的重要性不言而喻。它能夠應用於日常事物處理 組合優化 天體物理學 分子動力學 語言學 基因組學 天氣預報和其他相關領域。20世紀科學與工程領域的十大演算法之一就是一種排序演算法 快速排序。在標準庫中已經實現排序函式,再學習排序演算法仍有重要實際意義。再重溫排序演算法...