總結資料結構中重要的排序演算法

2021-08-07 22:55:41 字數 2442 閱讀 2751

1、直接插入排序:適合資料較小且資料較有序的數字序列。

演算法思想:將乙個陣列先劃分成已排序好的部分和未排序好的部分,從未排序好的部分中獲取乙個關鍵數作為待排序數,在 已

排好序的序列中找到合適位置插入這個資料。需要乙個中間變數tmp存放每次獲取的關鍵數。

程式**如下:

void insertsort(int arr, int len)

arr[j + 1] = arr[0];}}

2、希爾排序:又稱縮小增量排序法

演算法思想:給乙個增量組合,通常給

,即下面**中的dka;根據增量組合將待排序的關鍵字序列分成相應的若干

較小子序列,對子序列進行直接插入排序,使整個待排序列排好序。

程式**如下:

void shell(int arr, int arr_len,int dk)

arr[j + dk] = tmp;}}

void shellsort(int arr, int arr_len, int dka, int dka_len)

}1、簡單選擇排序

演算法思想:第一趟簡單選擇排序時,從第乙個記錄開始,通過n-1次關鍵字的比較,從n個記錄中選出關鍵字最小的記錄,並和

第乙個記錄進行交換;

第二趟簡單選擇排序時,從第二個記錄開始,通過n-2次關鍵字的比較,從n-1個記錄中選出關鍵字最小的記錄,並

和第二個記錄進行交換;

......

第i趟簡單排序時,從第i個記錄開始,通過n-i次關鍵字的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i個

記錄進行交換;

如此反覆,經過n-1趟簡單選擇排序,將把n-1個記錄排到位,剩下乙個最小記錄直接在最後。

程式**如下:

void selectsort(int arr, int len)

}tmp = arr[min];

arr[min] = arr[i];

arr[i] = tmp;}}

2、堆排序

演算法思想:採用完全二叉樹的順序結構的特徵進行分析。將待排序陣列看成是一顆完全二叉樹的順序表示,每個結點表示乙個

記錄,第乙個記錄作為二叉樹的根,之後的各記錄依次逐層從左到右順序排列,任意結點i的左孩子是2i,右孩子是

2i+1,對這顆完全二叉樹進行調整建堆,以下程式調整為大根堆。

程式**如下:

void heapadjust(int arr, int i, int len)

if (arr[j] < arr[i])break;

arr[0] = arr[i];

arr[i] = arr[j];

arr[j] = arr[0];

i = j;}}

void heapsort(int arr, int len)

for (int j = len; j > 0; --j)

}三、交換類排序

1、氣泡排序

演算法思想:通過對相鄰的資料元素的進行交換,逐步將待排序列變成有序序列。

程式**如下:

void bubblesort(int arr, int len) }

printf("i = %d\n", i);

if (!mark)

}}    

2、快速排序

演算法思想:採用分治法的思想,選乙個基準,曉得資料放到基準數字的左邊,大的資料放到右邊。

程式**如下:

int partition(int *arr,int low,int high)

arr[low]=arr[high];

while(low

arr[high]=arr[low]; }

arr[low]=tmp;

return low; }

void qsort(int *arr,int low,int high)

} void quicksort(int *arr,int len)

四、歸併排序

演算法思想:歸併排序基本思想基於合併,將兩個或兩個以上有序表合併成乙個新的有序表。首先將初始序列的n個記錄看成n個有

序的子串行,每個子串行長度為1,然後兩兩歸併,得到n/2個長度為2的有序子串行;在此基礎上,再對長度為2的有

序子串行進行兩兩歸併,得到若干長度為4的有序子串行。如此重複,直到得到乙個長度為n的有序子串行為止。

程式**如下:

void merge(int arr, int tmp, int startindex, int midindex, int endindex)

else

}while (i != midindex + 1)

while (j != endindex + 1)

for (int i = startindex; i <= endindex; ++i)

}void mergesort(int arr, int tmp, int startindex, int endindex)}

資料結構重要排序演算法總結

排序思想 將待排序的記錄ri 插入到已排好序的記錄表r1,r2,ri 1中,得到乙個新的 記錄數增加1的有序表。直到所有的記錄都插入完為止。設待排序的記錄順序存放在陣列r 1 n 中,在排 序的某一時刻,將記錄序列分成兩部分 r 1 i 1 已排好序的有序部分 r 1 n 未排好序的無序部分。顯然,...

資料結構中的排序演算法總結

資料結構中的排序演算法 當待排序序列基本有序時優先選擇簡單排序,快速排序平均次數少於堆排序 1 插入排序 1 直接插入排序 第一次將位置0和位置1進行比較,小的放前。第二次將位置2上的數字,插入到位置0和位置1中。第k次將位置k上的數字,插入到第k 1次已經完成的序列中。52 6 0 3 9 1 7...

資料結構排序演算法總結

常用的演算法有插入排序 氣泡排序 選擇排序 快速排序 歸併排序 希爾排序 堆排序 計數排序和基數排序。下面對著九種常見排序方法進行總結 排序方法 時間複雜度 空間複雜度 個人評價 插入排序 o n 2 o 1 選擇排序 氣泡排序 希爾排序 o n log n 快速排序 o log n 歸併排序 o ...