- 1、插入排序
- 注意:主要注意插入时从后面开始依次向后移动元素 ,否则元素会被覆盖
- c++代码:
int* insert_sort(int data[], int length)
{
for (int i = 0; i < length; i++)
{
for (int j = 0; j < i; j++)
{
if (data[j] > data[i])
{
int tmp = data[i];
for (int k = i - 1; k >= j; k--)
{
data[k+1] = data[k];
}
data[j] = tmp;
break;
}
}
}
return data;
}
- 2、冒泡排序
- 拓展:冒泡排序的思想就是“大数下沉”,而且依次下沉最大、次最大。。最终到最小值。这样可以通过该思想求出前k大的值(k很小时时间复杂度会很低)。
- c++实现:
int* bubble_sort(int data[], int length)
{
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length - i -1; j++)
{
if (data[j] > data[j + 1])
{
int tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
}
}
}
return data;
}
- 3、快速排序
- 拓展:选定岗哨值,每比较循环一次就确定了该岗哨值最终的排序位置,使用分治法进行设计;注意使用递归一定不要忘记写递归出口
- c++代码:
void quick_sort(int* data, int i, int j)
{
int start = i, end = j;
if (start >= end)
return;
while (i < j)
{
while (data[i] <= data[j] && i < j)
j--;
if (data[i] > data[j])
{
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
while (data[i] <= data[j] && i < j)
i++;
if (data[i] > data[j])
{
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
quick_sort(data, start, i - 1);
quick_sort(data, i + 1, end);
}
int main(int argc, char* argv[])
{
int data[] = { 4, 5, 1, 3, 2, 8 };
int length = 6;
quick_sort(data, 0, length - 1);
for (int i = 0; i < 6; i++)
cout << data[i] << endl;
system("pause");
return 0;
}