- /*
- main.m
- 用冒泡和选择排序的方式对数组进行排序
- 外层循环(这数组有多少个元素,就应该循环多少次)
- 内层循环(每次循环都是求1次最值<最大值/最小值>)
- 选择排序
- 分析:
- 选择排序就是,
- 先假设一个元素为最值(最小/最大值),拿这个元素跟另外的元素进行比较,找出真正最值出来!(内循环)
-
- 获得最值元素的下标,将最值元素的值放在第一个下标位置上,
- 原第一个元素的值,给了上一轮的最值(也就是进行交换)(外循环)
-
- 再次循环,忽略第一个下标!(int minIndex = i; int j=i)
- 选择排序的核心,假设个最值,跟别的元素比较,得出真正最值!
- 选择好此下标,将此下标的值与第一个元素的值进行互换!
-
- 冒泡排序
- 冒泡排序的核心,两个相邻的元素进行比较,得出最值,进行交换,将最值放到最后!
- 分析:
- 两个相邻元素进行比较,if(arr[j]>arr[j+1])
- 将最值放在最后! -- 比较后,直接互换位置
- 忽略已经排序好的元素! -- j<len-i
-
- */
- #import <Foundation/Foundation.h>
- int *minArr(int arr[],int len);
- int *maxArr(int arr[],int len);
- int *minMaoPao(int arr[],int len);
- int *maxMaoPao(int arr[], int len);
- int main(int argc, const char * argv[]) {
-
- int arr [5] ={8,9,5,3,4};
- //数组元素从小到大打印
- // int *minAr = minArr(arr,5);
- // for (int i=0; i<5; i++) {
- // printf("%d",minAr[i]);
- // }
- // printf("\n");
- //
- // //数组元素从大到小打印
- // int *maxAr = maxArr(arr,5);
- // for (int i = 0; i<5; i++) {
- // printf("%d",maxAr[i]);
- // }
- // printf("\n");
-
- // //数组元素从小到大打印
- // int *minMaoPaoArr = minMaoPao(arr,5);
- // for (int i = 0; i<5; i++) {
- // printf("%d",minMaoPaoArr[i]);
- // }
- // printf("\n");
-
- //数组元素从大到小打印
- int *maxMaoPaoArr = maxMaoPao(arr,5);
- for (int i = 0; i<5; i++) {
- printf("%d",maxMaoPaoArr[i]);
- }
- printf("\n");
-
- return 0;
- }
- //使用冒泡排序的方法,从小到大进行排序
- int *minMaoPao(int arr[],int len){
- int temp =0;
- for (int i =0; i<len; i++) {//外层循环,
- for (int j=0; j<len-i; j++) {//内层循环,取出最值! j<len-i,忽略以排序好的值
- if(arr[j]>arr[j+1]){//两个相邻的元素进行比较,大的换到后面去!
- temp = arr[j];
- arr[j] =arr[j+1];
- arr[j+1] = temp;
- }
- }
- }
- return arr;
- }
- //使用冒泡排序的方法,将数组元素,从大到小排序
- int *maxMaoPao(int arr[], int len){
- int temp = 0;
- for (int i = 0; i<len; i++) {
- for (int j=0; j<len-i; j++) {
- if (arr[j]<arr[j+1]) {
- temp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = temp;
- }
- }
- }
- return arr;
- }
- //将数组元素从小到大排序
- int *minArr(int arr[],int len){
-
- int temp = 0;
- for (int i = 0; i<len; i++) {
- //去除已经排序好的元素
- //假设一个元素为最值!arr[0]/arr[1]/arr[2]...
- int minIndex = i;
- for (int j=i; j<len; j++) {//j=i,再次循环时,会忽略以排好的元素
- if (arr[minIndex]>arr[j]) {
- minIndex =j;//求出最小值的下标
- }
- }
- //既要将最小值给arr[0]的元素,又要将原本arr[0]的值,拿去跟别的值进行比较 --交换
- temp = arr[minIndex];
- arr[minIndex] = arr[i];
- arr[i]=temp;
- }
- return arr;//这时候返回的是个指针?也就是首字母的地址
- }
- //将数组元素从大到小的排序
- int *maxArr(int arr[],int len){
- int temp = 0;
- for (int i = 0; i<len; i++) {
- int maxIndex = i;
- for (int j = i; j<len; j++) {//注意:j=i,这是忽略已经排好序的元素
- if (arr[maxIndex]<arr[j]) {
- maxIndex = j;
- }
- }
- //交换值
- temp = arr[maxIndex];
- arr[maxIndex] = arr[i];
- arr[i] = temp;
- }
-
- return arr;
- }
复制代码
|
|