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 ...