冒泡排序:
bool sort(int arr[], int n)
{
for (int i = 1; i < n; i++) {
for (int j = 0; j <n-i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return true;
}
选择排序:
bool sort(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (arr[i] > arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j]= temp;
}
}
}
return true;
}
插入排序:
直接插入排序是希尔插入排序中gap(空隙)为1时的特殊情况;
直接插入排序:
直接插入排序的难点在于搞清楚两层循环所代表的含义:
用temp可以保存数据减少交换步骤
同时用while使在跳出循环后end仍为temp所在的前一位
bool sort(int arr[], int n)
{
for (int i = 0; i < n-1; i++)
{
int end = i;
int temp= arr[end+1];
while (end >= 0)
{
if (arr[end] > temp)
{
arr[end+1] = arr[end];
end--;
}
else {
break;
}
}
arr[end+1] = temp;
}
return true;
}
希尔排序:
希尔排序快于直接插入的关键是gap的取值;
剩下的和插入排序基本相同;
bool sort(int arr[], int n)
{
int gap = n;
while (gap >1) {
gap= gap / 3+1;
for (int i = 0; i < n - gap; i++)
{
int end = i;
int temp = arr[end+gap];
while (end >= 0)
{
if (temp < arr[end])
{
arr[end + gap] = arr[end];
end-=gap;
}
else {
break;
}
}
arr[end + gap] = temp;
}
}
return true;
}