資料結構-排序演算法彙總(C語言實現)
阿新 • • 發佈:2021-10-31
氣泡排序
void BubbleSort(int *arr, int len) { int i, j, temp; for (i = 0; i < len ; i++) { Print(arr, len); for (j = 0; j < len-1 ; j++) { if (arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } }
選擇排序
void SelectSort(int *arr, int len) { int i, j, temp; for (i = 0; i < len ; i++) { Print(arr, len); for (j = i+1; j < len ; j++) { if (arr[i] > arr[j]) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } }
插入排序
void InsertSort(int *arr, int len) { int i, j, temp; for (i = 1; i < len ; i++) { Print(arr, len); temp = arr[i]; for (j = i-1; j >= 0 && arr[j] > temp ; j--) { arr[j+1] = arr[j]; } arr[j+1] = temp; } } // or void insertSort(int arr[], int n) { for(int i=1;i<n;++i) { int temp = arr[i]; int j = i-1; while(j>=0 && arr[j] > temp) { arr[j+1] = arr[j]; j--; } arr[j+1] = temp; } }
希爾排序
void shellSort(int arr[], int n)
{
int gap;
for(gap=n/2;gap>0;gap/=2)
{
for(int i=gap;i<n;i++)
{
int j;
int temp = arr[i];
for(j=i;j>=gap && arr[j-gap] > temp;j-=gap)
{
arr[j] = arr[j-gap];
}
arr[j] = temp;
display(arr, n);
}
}
}
快速排序
void quickSort(int arr[], int low, int high)
{
int i=low;
int j=high;
int temp = arr[i];
if(i<j)
{
while(i<j)
{
while(i<j && arr[j] >= temp) j--;
if(i<j)
{
arr[i] = arr[j];
i++;
}
while(i<j && arr[i] < temp) i++;
if(i<j)
{
arr[j] = arr[i];
j--;
}
}
arr[i] = temp;
quickSort(arr, low, i);
quickSort(arr, i+1, high);
}
}
歸併排序
void merge(int arr[], int l, int m, int r)
{
// split
int n1 = m - l + 1;
int n2 = r - m;
int i = 0;
int arr1[n1];
while(i<n1)
{
arr1[i] = arr[l+i];
i++;
}
int j = 0;
int arr2[n2];
while(j< n2)
{
arr2[j] = arr[m+1+j];
j++;
}
// merge
i=0;
j=0;
int k=l;
while(i<n1 && j < n2)
{
if(arr1[i] < arr2[j])
{
arr[k++] = arr1[i++];
}else{
arr[k++] = arr2[j++];
}
}
while(i<n1)
arr[k++] = arr1[i++];
while(j<n2)
arr[k++] = arr2[j++];
}
void mergeSort(int arr[], int l, int r)
{
if(l<r)
{
int m = l + (r-l)/2;
mergeSort(arr, l, m);
mergeSort(arr, m+1, r);
merge(arr, l,m, r);
}
}
堆排序