冒泡排序
# Here two loops would be required in sorting, the first loop for iterating and the second loop for comparing.
# 总是比较相邻的两个数,称为冒泡
void BubbleSort(int *arr, int len)
{
int i, j, temp;
for (i = 0; i < len ; i++)
{
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++)
{
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++)
{
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 i, j, temp, gap;
for(gap=n/2; gap>0; gap/=2)
{
for(i=gap; i<n; i++)
{
temp = arr[i];
for(j=i;j>=gap && arr[j-gap] > temp;j-=gap)
{
arr[j] = arr[j-gap];
}
arr[j] = temp;
}
}
}
快速排序
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);
}
}
堆排序