#include <stdio.h>
#include <time.h>
/*快速排序法*/
void quickSort(int *p,int low,int high)
{
if(low < high)
{
int temp = p[low];
int l = low;
int h = high;
while(l < h)
{
while(p[h] <= temp && l < h)
h--;
p[l] = p[h];
while(p[l] >= temp && l< h)
l++;
p[h] = p[l];
}
p[l] = temp;
quickSort(p,low,l-1);
quickSort(p,h+1,high);
}
}
/*优化升级的选择法排序*/
void seletSort1(int *p ,int n)
{
for(int i = 0 ;i < n-1;i++)
{
int idx = i;
for(int j = i+1;j<n;j++)
{
if(p[idx]>p[j])
{
idx = j;
}
}
if(idx != i)
{
p[i] ^= p[idx];
p[idx] ^= p[i];
p[i] ^= p[idx];
}
}
}
/*选择法排序*/
void seletSort(int *p ,int n)
{
for(int i = 0 ;i < n-1;i++)
{
for(int j = i+1;j<n;j++)
{
if(p[i]>p[j])
{
p[i] ^= p[j];
p[j] ^= p[i];
p[i] ^= p[j];
}
}
}
}
/*冒泡排序法*/
void maopaoSort(int *p,int n)
{
int flag;
for(int i=0;i<n-1;i++)
{
flag = 0; /*优化步骤*/
for(int j=0;j<n-i-1;j++)
{
if(p[j] > p[j+1])
{
p[j]^=p[j+1];
p[j+1]^=p[j];
p[j]^=p[j+1];
flag = 1;
}
}
if(flag == 0)
break;
}
}
int main()
{
int arr[10] = {0};
srand(time(NULL));
for(int i = 0;i < 10;i++)
{
arr[i] = rand()%10;
for(int j=0;j<i;j++)
{
if(arr[i] == arr[j])
i--;
}
}
// maopaoSort(arr,10);
// quickSort(arr,0,9);
// seletSort(arr,10);
seletSort1(arr,10);
for(int i= 0;i<10;i++)
{
printf("arr[%d] = %d\n",i,arr[i]);
}
}
C语言数组的几种排序方法
最新推荐文章于 2024-06-25 00:45:36 发布