排序算法(1)
冒泡排序
冒泡排序是最简单的排序方法,但是时间复杂度也很高。
算法描述:比较两个相邻的元素,如果升序的话,前面的比后面的大,就交换,这样一轮下来,就会找到这组数据中最大的元素,然后抛开这个元素继续重复上述步骤.直到排完为止。
#include<iostream>
using namespace std;
int a[10] = { 9,8,7,6,5,4,3,2,1,0 };
const int max = 10;
int main()
{
for (int i = 0; i < max - 1; i++)
{
for (int k = 0; k < max - 1 - i; k++)
{
if (a[k] > a[k + 1])
{
int temp = a[k];
a[k] = a[k + 1];
a[k + 1] = temp;
}
}
}
for (int i = 0; i < max; i++)
{
cout << a[i] << ' ';
}
system("pause");
return 0;
}
快速排序
快速排序运用了二分的思想,选择一个基准点,将数据分为两部分,在分别对着两部分进行重复操作直到完成排序。
#include<iostream>
using namespace std;
int a[10] = { 30,40,60,70,10,50,10,20,90,100 };
const int max = 10;
void quicksort(int head, int tail)
{
if (head >= tail)
{
return;
}
int i, j, x;
i = head;
j = tail;
x = a[i];
while (i < j)
{
while (i < j&&a[j] > x)
j--;
if (i < j)
a[i++] = a[j];
while (i < j&&a[i] < x)
i++;
if (i < j)
a[j--] = a[i];
}
a[i] = x;
quicksort(head, i - 1);
quicksort(i + 1, tail);
}
int main()
{
quicksort(0, 9);
for (int i = 0; i < max; i++)
{
cout << a[i] << ' ';
}
system("pause");
return 0;
}
直接插入排序法
按顺序取出未排序的数据,插入到已排序数据的正确位置。
把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
#include<iostream>
using namespace std;
int a[10] = { 9,8,7,6,5,4,3,2,1,0 };
const int max = 10;
void insert_sort(int size)
{
int left, right;
int mid;
int key;
for (int i = 1; i < size; i++)
{
key = a[i];
left = 0;
right = i - 1;
while (left <= right)
{
mid = (left + right) / 2;
if (a[mid] > key)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
right = i - 1;
while (right >= left)
{
a[right + 1] = a[right];
right--;
}
a[left] = key;
}
}
int main()
{
insert_sort(10);
for (int i = 0; i < max; i++)
{
cout << a[i] << ' ';
}
system("pause");
return 0;
}