排序
排序是查找的前提,排序是重点。
- 冒泡
void bubble(int arr[], int len)
{
//flag是冒泡的灵魂,flag的作用是:中间一旦排序好,冒泡停止
bool flag = true;
for(int i=0; i<len-1 && flag; i++)
{
flag = false;
for(int j=len-2; j>=i; j--)
{
if(arr[j] > arr[j+1])
{
flag = true;
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
- 插入
- 选择
//每一位数字和后面最小的一位数进行交换
void select(char arr[], int len)
{
int min, i, j;
for(i=0; i<len-1; i++)
{
for(min=i,j=i+1; j<len; j++)
{
if(arr[min] > arr[j])
min = j;
}
if(min != i)
{
int tmp = arr[min];
arr[min] = arr[i];
arr[i] = tmp;
}
}
}
- 快速排序
int FindPos(int* arr, int low, int high)
{
int val = arr[low];
while(low < high)
{
while(low<high && arr[high]>=val)
high--;
arr[low] = arr[high];
while(low<high && arr[low]<=val)
low++;
arr[high] = arr[low];
}
arr[low] = val;
return low;
}
void QuickSort(int* arr, int low, int high)
{
int pos;
if(low < high)
{
pos = FindPos(arr, low, high);
QuickSort(arr, low, pos-1);
QuickSort(arr, pos+1, high);
}
}
- 归并排序