iOS--排序算法集合
---------------------直接插入排序--------------------
思想:将数组分成两部分,两部分默认是有序的,然后从第二部分开始循环遍历,逐一与第一部分比较,比较是从第一部分的最后开始,如果比第一部分的大,就交换顺序。
//创建数组
int array[] = {1,6,4,9,6,12,3};
int i,j,temp;
//数组第一个元素默认排好序,从第二元素开始遍历数组
for (i = 1; i < 7; i ++) {
//获得第二部分的第一个元素
temp = array[i];
j = i - 1;
//与第一部分已经排好序的数组逐一比较,大于temp时,该元素后移
while (j >= 0 && array[j] > temp) {
//将大的元素插入到后面
array[j + 1] = array[j];
j --;
}
array[j + 1] = temp;
}
for (int i = 0; i < 7; i ++) {
printf("%d ",array[i]);
}
---------------------希尔排序算法--------------------
思想:先获取步长,根据步长获得每次的每个小部分,然后将每一个小部分进行直接插入排序。
//创建数组
int array[] = {7,4,8,3,5,9,7};
int i,j,gap;
//获取步长,即对增量进行选取
for (gap = 7/2; gap > 0; gap = gap / 2) {
//循环每一次增量,获取每个部分
for (i = 0; i < gap; i ++) {
//直接插入排序
for (j = i + gap; j < 7; j += gap) {
int temp = array[j];
int k = j - gap;
while (k >= 0 && array[k] > temp) {
array[k + gap] = array[k];
k -= gap;
}
array[k + gap] = temp;
}
}
}
for (int i = 0; i < 7; i ++) {
printf("%d ",array[i]);
}
---------------------直接选择排序算法--------------------
int array[] = {7,4,8,3,5,9,7};
int i,j,min,temp;
//进行n-1次循环就可以,剩下的那个肯定是最大的
for (i = 0; i < 7 - 1; i ++) {
//假设第一个是最小的
min = i;
//找到最小的
for (j = i + 1; j < 7; j ++) {
if (array[min] > array[j]) {
min = j;
}
}
//如果第一个不是最小的
if (min != i) {
temp = array[min];
array[min] = array[i];
array[i] = temp;
}
}
---------------------冒泡排序算法--------------------
int array[] = {7,4,8,3,5,9,7};
for (int i = 0; i < 7; i ++) {
printf("%d ",array[i]);
}
for (int i = 0; i < 7 - 1; i ++) {
for (int j = 0; j < 7-1-i; j ++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
for (int i = 0; i < 7; i ++) {
printf("%d ",array[i]);
}
---------------------快速排序算法--------------------
void quickSort(int array[], int numSize)
{
int i = 0;
int j = numSize - 1;
//指定参照的为第一个元素
int val = array[0];
//当数组元素个数大于2的时候才有必要排序
if (numSize > 1) {
//判断终止的条件:当i< j 的时候
while (i < j) {
//从后向前
for (j = numSize - 1; j > i; j --) {
if (array[j] < val) {
array[i ++] = array[j];
break;
}
}
//从前向后
for (i = 0; i < j; i ++) {
if (array[i] > val) {
array[j --] = array[i];
break;
}
}
//将第一个加入到数组里
array[i] = val;
//递归,对前i个排序
quickSort(array, i);
quickSort(array + i + 1, numSize - i - 1);
}
}
}