效率最高的冒泡与快排算法 C语言实现
冒泡排序思想代码
快速排序思想代码
冒泡排序
思想
不断地把最大或最小元素不断冒出来。 如排序5 3 4 9 7 6 2 假如我们用升序的方式,从左边开始扫描,相邻元素两两比较,当左边元素比右边大时就交换,反之,则不用交换。 第一趟循环后的结果为:3 1 5 4 6 7 4 9 这样就把最大的9冒出来了 第二塘循环后的结果为:1 3 4 5 6 4 7 9 这样就把最大的7冒出来了 以此循环,结果如下代码图所示
代码
#include<stdio.h>
void bubbling(int *arr
, int N
)
{
int flag
= 0;
for(int i
=0; i
<N
-1; i
++)
{
flag
= 0;
for(int j
=0; j
<N
-i
-1; j
++)
if(arr
[j
] > arr
[j
+1])
{
flag
= 1;
arr
[j
] ^= arr
[j
+1];
arr
[j
+1] ^= arr
[j
];
arr
[j
] ^= arr
[j
+1];
}
if(flag
== 0)
return;
}
}
int main(int agrc
, char **agrv
)
{
int N
;
scanf("%d", &N
);
int arr
[N
];
for(int i
=0; i
<N
; i
++)
scanf("%d", &arr
[i
]);
bubbling(arr
, N
);
for(int i
=0; i
<N
; i
++)
printf("%d ", arr
[i
]);
printf("\n");
return 0;
}
结果如下:
快速排序
思想
快速排序的基本思想是任取待排序序列的一个元素作为中心元素(可以用第一个,最后一个,也可以是中间任何一个),习惯将其称为pivot,枢轴元素;将所有比枢轴元素小的放在其左边;将所有比它大的放在其右边;形成左右两个子表;然后对左右两个子表再按照前面的算法进行排序,直到每个子表的元素只剩下一个。
代码
#include <stdio.h>
int array_num
;
void QuickSort(int left
, int right
, int *quick_sort
)
{
int temp
, i
=left
, j
=right
;
if(left
>= right
) return ;
temp
= quick_sort
[i
];
while(i
< j
)
{
while(quick_sort
[j
]>=temp
&& i
<right
) j
--;
quick_sort
[i
] = quick_sort
[j
];
while(quick_sort
[i
]<=temp
&& i
<j
) i
++;
quick_sort
[j
] = quick_sort
[i
];
}
quick_sort
[i
] = temp
;
for(int p
= 0; p
<array_num
; p
++)
printf("%d ", quick_sort
[p
]);
printf("\n");
QuickSort(left
, i
-1, quick_sort
);
QuickSort(i
+1, right
, quick_sort
);
}
int main(int agrc
, char **agrv
)
{
printf("input number:\n");
scanf("%d", &array_num
);
int quick_sort
[array_num
];
for(int j
= 0; j
< array_num
; j
++)
scanf("%d", &quick_sort
[j
]);
QuickSort(0, array_num
- 1, quick_sort
);
return 0;
}
结果如下: