排序算法
int a[] = { 9,8,16,2,11,5,4,21,3,1,20,6 };
int n = sizeof(a) / sizeof(int);
-
冒泡排序:左右两个数比较,如果左边的值大于右边的值,交换。经过第一轮循环后,最大的值放到最右边,第二轮循环对剩下n-1个数进行冒泡排序。总共需要n-1次循环。
for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (a[j] > a[j+1]) { swap(a[j], a[j+1]); } } } for (int k = 0; k < n; k++) { cout << a[k] << endl; }
- 选择排序:遍历数组,找到数组中最小的值,放进下标为0的位置,下标加1,第二轮遍历数组,找到最小值放进下标为1的位置。
for (int i = 0; i < n-1; i++)
{
int min = i;
int temp;
for (int j = i; j < n; j++)
{
if (a[j] < a[min])
{
min = j;
}
}
if (min != i)
{
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
- 选择排序:遍历数组,找到数组中最小的值,放进下标为0的位置,下标加1,第二轮遍历数组,找到最小值放进下标为1的位置。
-
快速排序
int fastsort(int a[],int down, int up)
{
int low = down;
int high = up;
int key = a[low];
while (low < high)
{
while (high > low &&a[high] >= key)
{
high–;
}
while (high > low &&a[low] <= key)
{
low++;
}
swap(a[low], a[high]);
}
swap(a[low], a[down]);
return low;
}
void quicksort(int a[],int down, int up)
{
if (up>down)
{
int q = fastsort(a, down,up);
quicksort(a, down, q-1);
quicksort(a, q + 1, up);
}
}//快速排序
int main(void)
{
int a[] = { 9,8,16,2,11,5,4,21,3,1,20,6 };
int n = sizeof(a) / sizeof(int);
quicksort(a, 0, n - 1);