(1)冒泡排序
算法的核心就是依次比较相邻的两个数,把小数放在前面,大数放在后面
int array[] = {3, 5, 1, 6, 8, 2, 4, 9, 7};int count = sizeof(array) / sizeof(array[0]); //j计算数组元素个数
int flag = 0; //这步是对排序的优化
for (int i = 0; i < count - 1 && flag == 0; i++) {
flag = 1;
for (int j = 0; j < count - i - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = 0;
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = 0;
}
}
}
for (int i = 0; i < count; i++) {
printf("[%2d] = %d\n", i, array[i]);
}
(2)选择排序
for(int i = 0; i < count - 1; i++){
int minIndex= i;
for (int j = minIndex + 1; j < count; j++) {
if (array[minIndex] > array[j]) {
minIndex = j;
}
}
if(minIndex != i){
int temp = 0;
temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
for (int i = 0; i < count; i++) {
printf("[%2d] = %d\n", i, array[i]);
}
(3)插入排序
int array[] = {3, 5, 1, 6, 8, 2, 4, 9, 7};
int count = sizeof(array) / sizeof(array[0]);
int temp = 0;
int j = 0;
for (int i = 1; i < count; i++) {
j = i;
temp = array[j];
while (j > 0 && temp < array[j - 1]) {
array[j] = array[j - 1];
j--;
}
array[j] = temp;
}
for(int i = 0; i < count; i++){
printf("[%2d] = %d\n", i, array[i]);
}
(4)折半查找
折半查找只能找顺序已经排好的数组
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};int count = sizeof(array) / sizeof(array[0]);
int start = 0, end = count - 1;
int mid =(start + end) / 2;
int target = 7;
while (start <= end) {
mid =(start + end) / 2;
if (array[mid] < target) {
start = mid + 1;
}else if(array[mid] > target){
end = mid - 1;
}else{
break;
}
}
if (start <= end) {
printf("[%2d] = %d\n", mid, array[mid]);
} else {
printf("not found\n");
}
(5)打乱数组
for (int i = count - 1; i > 0 ; i--) {
unsigned int random = arc4random() % (i + 1);
int temp = 0;
temp = array[random];
array[random] = array[i];
array[i] = temp;
}
for (int i = 0; i < count; i++) {
printf("[%2d] = %d\n", i, array[i]);
}
(6)快速排序(递归)
递归一定要先找到出口,如果没有出口,会造成系统崩溃
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);
}