C语言的几种排序方式
2015-02-27 22:05
204 查看
1、冒泡排序
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名冒泡排序。
代码如下:
int array[] = {5, 4, 65, 3, 10, 15, 6};
int count = sizeof(array) / sizeof(array[0]);
int flag = 0;
for (int i = 0; i < count - 1 && 0 == flag; i++) {
flag = 1;
for (int j = 0; j < count - i - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = 0;
}
}
}
2、插入排序
每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
代码如下:
int array[] = {5, 4, 65, 3, 10, 15, 6};
int count = sizeof(array) / sizeof(array[0]);
for (int i = count - 1; i > 0; i--) {
int temp = array[i];
int j = i;
while (j > 0 && array[j - 1] > temp) {
array[j] = array[j - 1];
j--;
}
array[j] = temp;
}
3、选择排序
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
代码如下:
for (int i = 0; i < count - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < count; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
}
4、快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
代码如下:
void quickSort(int array[], int count)
{
if (count < 2) {
return;
}
int start = 0, end = count - 1;
int temp = array[start];
while (start < end) {
while (start < end && array[end] > temp) {
end--;
}
if (start < end) {
array[start] = array[end];
start++;
}
while (start < end && array[start] < temp) {
start++;
}
if (start < end) {
array[end] = array[start];
end--;
}
}
array[start] = temp;
quickSort(array, start);
quickSort(array + start + 1, count - start - 1);
}
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名冒泡排序。
代码如下:
int array[] = {5, 4, 65, 3, 10, 15, 6};
int count = sizeof(array) / sizeof(array[0]);
int flag = 0;
for (int i = 0; i < count - 1 && 0 == flag; i++) {
flag = 1;
for (int j = 0; j < count - i - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = 0;
}
}
}
2、插入排序
每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
代码如下:
int array[] = {5, 4, 65, 3, 10, 15, 6};
int count = sizeof(array) / sizeof(array[0]);
for (int i = count - 1; i > 0; i--) {
int temp = array[i];
int j = i;
while (j > 0 && array[j - 1] > temp) {
array[j] = array[j - 1];
j--;
}
array[j] = temp;
}
3、选择排序
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
代码如下:
for (int i = 0; i < count - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < count; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
}
4、快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
代码如下:
void quickSort(int array[], int count)
{
if (count < 2) {
return;
}
int start = 0, end = count - 1;
int temp = array[start];
while (start < end) {
while (start < end && array[end] > temp) {
end--;
}
if (start < end) {
array[start] = array[end];
start++;
}
while (start < end && array[start] < temp) {
start++;
}
if (start < end) {
array[end] = array[start];
end--;
}
}
array[start] = temp;
quickSort(array, start);
quickSort(array + start + 1, count - start - 1);
}
相关文章推荐
- C语言获取系统时间的几种方式
- 演示几种用C语言来执行shellcode(其实也就是机器码)的方式
- C语言获取系统时间的几种方式 !
- 数据排序的几种方法(c语言实现)
- C语言获取系统时间的几种方式
- 几种排序方法的实现 (C语言)
- List<T> 排序的几种方式
- C语言获取系统时间的几种方式
- c语言中的几种排序算法——冒泡排序、快速排序、插入排序、选择排序
- C语言获取系统时间的几种方式
- C语言获取系统时间的几种方式
- C语言几种软件滤波方式
- C语言获取系统时间的几种方式 !
- C语言获取系统时间的几种方式(转)
- C语言获取系统时间的几种方式 !
- php 几种排序方式
- C语言获取系统时间的几种方式
- C语言获取系统时间的几种方式(转)
- C语言获取系统时间的几种方式
- 几种不同C语言继承方式简介