您的位置:首页 > 编程语言 > C语言/C++

C语言 - 排序总结

2015-08-10 21:05 465 查看
#import <Foundation/Foundation.h>
#pragma mark - 快速排序
void sortArray(int array[] , int count)
{
if (count < 2) {
return;
}
//记录开始 和 结尾的位置
int start = 0;
int end = count - 1;
//记录开始的数值
int temp = array[start];
//当开始 和 结尾 没有碰头的时候进行循环 将所有的数以array[start]为标准 分类,大的放左边  小的放右边
while (start < end) {

//从后往前找到比temp 大的位置end
while (start < end && temp < array[end]) {
end --;
}
if (start < end) {
//将end 位置上的数值赋值给 start位置的数
array[start] = array[end];
//将 start往后移一位
start ++;
}

//从前往后找到比temp 位置大的数的位置start
while (start < end && temp > array[start]) {
start++;
}
if (start < end) {
//将start上比temp大的数值 赋值给end
array[end] = array[start];
//end 往前移一位
end -- ;
}
//将temp 放到空得位置上
array[start] = temp;

//对左右两边的数 再次重复刚才的过程  0 ~ start
//左边  0 ~ start  start个元素
sortArray(array, start);
//右边 start ~ count  count - start - 1 个元素
sortArray(array + start + 1 , count - start - 1);

}
}

int main(int argc, const char * argv[])
{

int a[10] = {0};
//随机赋值
for (int i = 0; i < 10 ; i++) {
a[i] = arc4random() % (40 - 20 + 1) + 20;
printf("%d ",a[i]);
}
printf("\n");

//定义一个标志量
int flag = 1;// 无序标志 1代表无序 0代表有序
for (int i = 0 ; i < 10 - 1  && flag == 1; i++) {

flag = 0; // 每次开始冒泡前都先假定是数组是有序的
for (int j = 0; j < 10 - i - 1; j++) {
if (a[j] > a[j + 1]) {
flag = 1;// 如果发生数据交换,就说明数组是无序的
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}

for (int i = 0; i < 10 ; i ++) {
printf("%d ",a[i]);
}

#pragma - mark 选择排序
//每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。

int minIndex = 0;
for (int i = 0; i < 10; i ++) {
//假设当前位置 就是最小下标
minIndex = i;

//从当前坐标找比当前坐标对应数值小得数
for (int j = minIndex + 1; j < 10; j ++) {
if (a[minIndex] > a[j]) {
//记录最小下标的位置
minIndex = j;
}
}
//将最小下标最小的数值 和第一个数交换
int temp = a[minIndex];
a[minIndex] = a[i];
a[i] = temp;

}
for (int i = 0; i < 10 ; i++) {
printf("%d ",a[i]);
}

#pragma - mark 插入排序
//插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。

for (int i = 1; i < 10; i++) {
//记录当前的下标 和 数值
int j = i;
int temp = a[j];
//依次从当前位置  跟之前的元素比较
while (j > 0 && temp < a[j - 1] ) {
a[j] = a[j - 1];
j --;
}
a[j] = temp;
}
for (int i = 0; i < 10 ; i++) {
printf("%d ",a[i]);
}

#pragma mark - 快速排序
sortArray(a, 10);
for (int i = 0; i < 10 ; i++) {
printf("%d ",a[i]);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: