一.快速排序
转载请附上:https://blog.csdn.net/qq_37978862/article/details/104651495
步骤:
1.定第一个元素为中指
2.从右到左,右赋值给左
3.从左到右,左赋值给右
#include <stdio.h>
//1.随机定中值
//2.从右到左,右赋值给左
//3.从左到右,左赋值给右
int search_mid(int *p, int left, int right)
{
//将第一个元素设为中值
int mid = p[left];
while (right > left) //下标一定要右边大于左边
{
//右边的进行比较
while (p[right] > mid && right > left)
right--;
p[left] = p[right];
//左边的进行比较
while (p[left] < mid && right > left)
left++;
p[right] = p[left];
}
//mid保存了 第一个元素,
p[left] = mid;
return left;
}
//*一定要记得递归必须有结束条件*
//1.找中点
//2.左排
//3.右排
void quick_sort(int *q, int left, int right)
{
if (right > left)
{
int mid = search_mid(q, left, right);
quick_sort(q, left, mid - 1);
quick_sort(q, mid + 1, right);
}
}
int main()
{
int a[9] = {10, 20, 50, 98, 23, 1, 5, 88, 77};
int i = 0;
quick_sort(a, 0, 8);
for (i = 0; i < 9; i++)
{
printf("%d\n", a[i]);
}
}
二.选择排序
步骤:
首先找到数据中最小的数字,
与第一个位置互换,
然后次小的与第二个数据交换,重复,
实现由小到大排序
#include<stdio.h>
void choose_sort(int *p,int n)
{
int i,j,index,t;
for( i = 0;i<n-1;i++ )
{
index = i;
for( j = i+1;j<n;j++ )
{
if(p[j]<p[index])
{
index = j;
}
}
//index的值发生变化,证明该位置的数,不是第该位置小
if( index != i)
{
t = p[i];
p[i] = p[index];
p[index] = t;
}
}
}
int main()
{
int i;
int a[8] = {1,2,3,6,344,55,99};
choose_sort(a,7);
for(i = 0;i<7;i++)
{
printf("%d\n",a[i]);
}
}
三.冒泡排序
#include<stdio.h>
void mao_pao(int *p,int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(p[j]>p[j+1])
{
t = p[j];
p[j] = p[j+1];
p[j+1] = t;
}
}
}
}
int main()
{
int i;
int a[8] = {1,2,3,6,344,55,99};
mao_pao(a,7);
for(i = 0;i<7;i++)
{
printf("%d\n",a[i]);
}
}